From: Aleksei Nikiforov <darktemplar@altlinux.org> To: Ivan Zakharyaschev <imz@altlinux.org> Cc: devel@lists.altlinux.org, ldv@altlinux.org Subject: Re: [devel] [APT PATCH] test/integration/framework/test-apt-method-http*: use nginx as a forking daemon Date: Tue, 18 Feb 2020 16:17:11 +0300 Message-ID: <614161b6-33a0-2acb-3aa3-ad785616661a@altlinux.org> (raw) In-Reply-To: <alpine.LFD.2.20.2002181400110.6363@imap.altlinux.org> 18.02.2020 15:44, Ivan Zakharyaschev пишет: > Hello! > > On Tue, 18 Feb 2020, Aleksei Nikiforov wrote: > >> 18.02.2020 06:39, Ivan Zakharyaschev пишет: >>> This is needed not to send requests to nginx before it is ready to >>> listen: when the main process forks and exits, nginx is considered to >>> be ready. >>> >>> Without this change, I observed a failure in the http test, but not >>> the https one, probably, because the delay in the https test was >>> larger due to an extra package being built: >>> >>> Run Testcase (22/29) test-apt-method-http >>> Building package: simple-package >>> Test for successful execution of apt-get update … >>> Err http://localhost x86_64 release >>> Could not connect to localhost:8080 (127.0.0.1). - connect (111 >>> Connection refused) >>> >>> However: >>> >>> Run Testcase (23/29) test-apt-method-https >>> Building package: simple-package >>> Building package: conflicting-package-one >>> Test for successful execution of apt-get update … PASS >>> Test that package(s) are not installed with rpm -q simple-package … PASS >>> Test for successful execution of apt-get install simple-package … PASS >>> Test that package(s) are installed with rpm -q simple-package … PASS >>> Pinning invalid key in apt >>> Test for failure in execution of apt-get update … PASS >>> Test that package(s) are not installed with rpm -q conflicting-package-one … >>> PASS >>> Test for failure in execution of apt-get install conflicting-package-one … >>> PASS >>> Test that package(s) are not installed with rpm -q conflicting-package-one … >>> PASS >>> --- >>> test/integration/framework | 2 -- >>> test/integration/test-apt-method-http | 5 +++-- >>> test/integration/test-apt-method-https | 5 +++-- >>> test/integration/test-apt-method-https-invalid-cert-hostname | 5 +++-- >>> 4 files changed, 9 insertions(+), 8 deletions(-) >>> >>> diff --git a/test/integration/framework b/test/integration/framework >>> index 5f0f58eda..eccfb174e 100644 >>> --- a/test/integration/framework >>> +++ b/test/integration/framework >>> @@ -560,7 +560,6 @@ nginxsetuphttp() { >>> cat >> $TMPWORKINGDIRECTORY/nginx/nginx.conf << ENDCONFIG >>> worker_processes 1; >>> error_log $TMPWORKINGDIRECTORY/nginx/error.log; >>> -daemon off; >>> pid $TMPWORKINGDIRECTORY/nginx/nginx.pid; >>> >>> events { >>> @@ -606,7 +605,6 @@ nginxsetuphttps() { >>> cat > > $TMPWORKINGDIRECTORY/nginx/nginx.conf << ENDCONFIG >>> worker_processes 1; >>> error_log $TMPWORKINGDIRECTORY/nginx/error.log; >>> -daemon off; >>> pid $TMPWORKINGDIRECTORY/nginx/nginx.pid; >>> >>> events { >>> diff --git a/test/integration/test-apt-method-http >>> b/test/integration/test-apt-method-http >>> index 0872c99d4..d463a0d14 100755 >>> --- a/test/integration/test-apt-method-http >>> +++ b/test/integration/test-apt-method-http >>> @@ -17,8 +17,9 @@ rpm http://localhost:8080/ $(getarchitecture) apt-tests >>> rpm http://localhost:8080/ noarch apt-tests >>> END >>> >>> -/usr/sbin/nginx -c $TMPWORKINGDIRECTORY/nginx/nginx.conf -p >>> $TMPWORKINGDIRECTORY &>> $TMPWORKINGDIRECTORY/nginx/process-stderr.log & >>> -NGINXPID=$! >>> +/usr/sbin/nginx -c $TMPWORKINGDIRECTORY/nginx/nginx.conf -p >>> $TMPWORKINGDIRECTORY &>> $TMPWORKINGDIRECTORY/nginx/process-stderr.log >>> +NGINXPID="$(cat $TMPWORKINGDIRECTORY/nginx/nginx.pid)" >>> +[ -n "$NGINXPID" ] >>> >>> addtrap 'prefix' "kill -SIGTERM $NGINXPID; [ \"$EXIT_CODE\" = '0' ] || cat >>> $TMPWORKINGDIRECTORY/nginx/process-stderr.log;" > >> Does nginx always finish starting before actual test runs with these changes? >> Or does it sometimes still fail to start in time but produces different error? > > In my ca. 10 runs, this never happened. (In my 3-4 runs of the previous > revision, it always happened.) > > In my solution, I relied on the description of the behavior of a > "traditional UNIX forking daemon" given in man systemd.service: > > If set to forking it is expected that the process > configured with ExecStart= will call fork() as part of > its start-up. The parent process is expected to exit > when start-up is complete and all communication channels > set up. The child continues to run as the main daemon > process. This is the behavior of traditional UNIX > daemons. If this setting is used, it is recommended to > also use the PIDFile= option, so that systemd can > identify the main process of the daemon. systemd will > proceed starting follow-up units as soon as the parent > process exits. > > I believe that nginx conforms to this specification without further > explorations. However, I did practical experiments as stated above. > >> And I'd prefer to have a verbose error message like 'Nginx failed start in >> time' or something else instead of default one. > > Let's look what the error messages look like now and before my changes. > To model it, I did: chmod a-x /usr/sbin/nginx > > In my revision: > > Run Testcase (22/29) test-apt-method-http > Building package: simple-package > E: Looks like the testcases ended prematurely with exitcode: 126 > test-apt-method-http ... FAIL > > Quit short and clear IMHO. > It's definitely shorter, but I don't agree with 'clear'. There is no reason stated for prematurely end and no location of this exit is specified either. > In the previous revision, the reason for failure is not caught as early > and not reported clearly. The messages are long: > > Run Testcase (22/29) test-apt-method-http > Building package: simple-package > Test for successful execution of apt-get update … > Err http://localhost x86_64 release > Could not connect to localhost:8080 (127.0.0.1). - connect (111 > Connection refused) > Err http://localhost noarch release > Could not connect to localhost:8080 (127.0.0.1). - connect (111 > Connection refused) > Err http://localhost x86_64/apt-tests pkglist > Could not connect to localhost:8080 (127.0.0.1). - connect (111 > Connection refused) > Err http://localhost x86_64/apt-tests release > Could not connect to localhost:8080 (127.0.0.1). - connect (111 > Connection refused) > Err http://localhost noarch/apt-tests pkglist > Could not connect to localhost:8080 (127.0.0.1). - connect (111 > Connection refused) > Err http://localhost noarch/apt-tests release > Could not connect to localhost:8080 (127.0.0.1). - connect (111 > Connection refused) > Failed to fetch http://localhost:8080/x86_64/base/release Could not > connect to localhost:8080 (127.0.0.1). - connect (111 Connection refused) > Failed to fetch http://localhost:8080/noarch/base/release Could not > connect to localhost:8080 (127.0.0.1). - connect (111 Connection refused) > Failed to fetch http://localhost:8080/x86_64/base/pkglist.apt-tests Could > not connect to localhost:8080 (127.0.0.1). - connect (111 Connection > refused) > Failed to fetch http://localhost:8080/x86_64/base/release.apt-tests Could > not connect to localhost:8080 (127.0.0.1). - connect (111 Connection > refused) > Failed to fetch http://localhost:8080/noarch/base/pkglist.apt-tests Could > not connect to localhost:8080 (127.0.0.1). - connect (111 Connection > refused) > Failed to fetch http://localhost:8080/noarch/base/release.apt-tests Could > not connect to localhost:8080 (127.0.0.1). - connect (111 Connection > refused) > Reading Package Lists... > Building Dependency Tree... > W: Release files for some repositories could not be retrieved or > authenticated. Such repositories are being ignored. > W: You may want to run apt-get update to correct these problems > E: Some index files failed to download, they have been ignored, or old > ones used instead. > FAIL > Test that package(s) are not installed with rpm -q simple-package … PASS > Test for successful execution of apt-get install simple-package … > Reading Package Lists... > Building Dependency Tree... > E: Couldn't find package simple-package > FAIL > Test that package(s) are installed with rpm -q simple-package … FAIL > ./test-apt-method-http: line 1: kill: (30573) - No such process > test-apt-method-http ... FAIL > > > So, I think, after my changes the clearness of the failure messages > improved. I'd suggest you can make an additional patch if you'd like to > improve the error messages somehow. >
next prev parent reply other threads:[~2020-02-18 13:17 UTC|newest] Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-18 3:39 Ivan Zakharyaschev 2020-02-18 8:03 ` Aleksei Nikiforov 2020-02-18 12:44 ` Ivan Zakharyaschev 2020-02-18 13:17 ` Aleksei Nikiforov [this message] 2020-02-18 13:41 ` Dmitry V. Levin 2020-02-18 14:12 ` Ivan Zakharyaschev 2020-02-18 14:28 ` Dmitry V. Levin 2020-02-18 14:47 ` Aleksei Nikiforov 2020-02-18 14:58 ` Dmitry V. Levin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=614161b6-33a0-2acb-3aa3-ad785616661a@altlinux.org \ --to=darktemplar@altlinux.org \ --cc=devel@lists.altlinux.org \ --cc=imz@altlinux.org \ --cc=ldv@altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git