all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#32665: Shepherd is stuck waiting for /var/run/nginx/pid
@ 2018-09-08 16:53 Ludovic Courtès
  2018-09-08 17:16 ` Clément Lassieur
  0 siblings, 1 reply; 3+ messages in thread
From: Ludovic Courtès @ 2018-09-08 16:53 UTC (permalink / raw)
  To: 32665; +Cc: clement

[-- Attachment #1: Type: text/plain, Size: 672 bytes --]

Hello Clément,

Commit 9fc2922794ffaae48e0a7c536e530ea2e0d46cf3 adds a loop to the nginx
service that checks for /var/run/nginx/pid.  Unfortunately, on berlin
that loop never ends because the file is not created (on berlin we use a
“hand-written” nginx config file that lacks a “pid” directive; see
guix-maintenance.git.)

I think there are two things to address:

  1. Don’t look for a PID file when passed a hand-written config file;

  2. Make sure the loop always terminates, similar to what
    ‘make-forkexec-constructor’ does.

The patch below fixes that.  The second patch fixes the ‘stop’
procedure.

Thoughts?

Ludo’.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-services-nginx-Don-t-read-PID-file-when-passed-a-cus.patch --]
[-- Type: text/x-patch, Size: 1723 bytes --]

From c9daf228a69c24cff6ba5508a3b67ebe3c702a2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Sat, 8 Sep 2018 18:48:48 +0200
Subject: [PATCH 1/2] services: nginx: Don't read PID file when passed a custom
 config file.

Fixes <https://bugs.gnu.org/XXX>.

* gnu/services/web.scm (nginx-shepherd-service): Check whether FILE is
true and don't read the PID file if it is; use 'read-pid-file' instead
of a potentially endless loop.
---
 gnu/services/web.scm | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 3778efd04..1c993b29f 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -610,14 +610,12 @@ of index files."
                  (match '#$args
                    (("-s" . _) #t)
                    (_
-                    (let loop ((duration 0))
-                      ;; https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864/comments/7
-                      (sleep duration)
-                      (if (file-exists? #$pid-file)
-                          (let ((pid (call-with-input-file #$pid-file read)))
-                            ;; it could be #<eof>
-                            (if (integer? pid) pid (loop 1)))
-                          (loop 1)))))))))
+                    ;; When FILE is true, we cannot be sure that PID-FILE will
+                    ;; be created, so assume it won't show up.  When FILE is
+                    ;; false, read PID-FILE.
+                    #$(if file
+                          #~#t
+                          #~(read-pid-file #$pid-file))))))))
 
      ;; TODO: Add 'reload' action.
      (list (shepherd-service
-- 
2.18.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-services-nginx-stop-returns-f.patch --]
[-- Type: text/x-patch, Size: 1079 bytes --]

From 211a820dbd37926f07f9245ab42cbaf6fb0264bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Sat, 8 Sep 2018 18:50:55 +0200
Subject: [PATCH 2/2] services: nginx: 'stop' returns #f.

Previously we'd return #t, which the Shepherd would consider a failure
to stop the service.

* gnu/services/web.scm (nginx-shepherd-service): In 'nginx-action',
return #f when stopping the service.
---
 gnu/services/web.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 1c993b29f..df82a6de6 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -608,7 +608,7 @@ of index files."
                                (default-nginx-config config))
                          #$@args)
                  (match '#$args
-                   (("-s" . _) #t)
+                   (("-s" . _) #f)
                    (_
                     ;; When FILE is true, we cannot be sure that PID-FILE will
                     ;; be created, so assume it won't show up.  When FILE is
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* bug#32665: Shepherd is stuck waiting for /var/run/nginx/pid
  2018-09-08 16:53 bug#32665: Shepherd is stuck waiting for /var/run/nginx/pid Ludovic Courtès
@ 2018-09-08 17:16 ` Clément Lassieur
  2018-09-08 21:03   ` Ludovic Courtès
  0 siblings, 1 reply; 3+ messages in thread
From: Clément Lassieur @ 2018-09-08 17:16 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 32665

Oh!  Sorry for the mess.  The patches both look good to me, thank you!

Clément

Ludovic Courtès <ludo@gnu.org> writes:

> Hello Clément,
>
> Commit 9fc2922794ffaae48e0a7c536e530ea2e0d46cf3 adds a loop to the nginx
> service that checks for /var/run/nginx/pid.  Unfortunately, on berlin
> that loop never ends because the file is not created (on berlin we use a
> “hand-written” nginx config file that lacks a “pid” directive; see
> guix-maintenance.git.)
>
> I think there are two things to address:
>
>   1. Don’t look for a PID file when passed a hand-written config file;
>
>   2. Make sure the loop always terminates, similar to what
>     ‘make-forkexec-constructor’ does.
>
> The patch below fixes that.  The second patch fixes the ‘stop’
> procedure.
>
> Thoughts?
>
> Ludo’.
>
> From c9daf228a69c24cff6ba5508a3b67ebe3c702a2b Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
> Date: Sat, 8 Sep 2018 18:48:48 +0200
> Subject: [PATCH 1/2] services: nginx: Don't read PID file when passed a custom
>  config file.
>
> Fixes <https://bugs.gnu.org/XXX>.
>
> * gnu/services/web.scm (nginx-shepherd-service): Check whether FILE is
> true and don't read the PID file if it is; use 'read-pid-file' instead
> of a potentially endless loop.
> ---
>  gnu/services/web.scm | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/gnu/services/web.scm b/gnu/services/web.scm
> index 3778efd04..1c993b29f 100644
> --- a/gnu/services/web.scm
> +++ b/gnu/services/web.scm
> @@ -610,14 +610,12 @@ of index files."
>                   (match '#$args
>                     (("-s" . _) #t)
>                     (_
> -                    (let loop ((duration 0))
> -                      ;; https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864/comments/7
> -                      (sleep duration)
> -                      (if (file-exists? #$pid-file)
> -                          (let ((pid (call-with-input-file #$pid-file read)))
> -                            ;; it could be #<eof>
> -                            (if (integer? pid) pid (loop 1)))
> -                          (loop 1)))))))))
> +                    ;; When FILE is true, we cannot be sure that PID-FILE will
> +                    ;; be created, so assume it won't show up.  When FILE is
> +                    ;; false, read PID-FILE.
> +                    #$(if file
> +                          #~#t
> +                          #~(read-pid-file #$pid-file))))))))
>  
>       ;; TODO: Add 'reload' action.
>       (list (shepherd-service
> -- 
> 2.18.0
>
> From 211a820dbd37926f07f9245ab42cbaf6fb0264bb Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
> Date: Sat, 8 Sep 2018 18:50:55 +0200
> Subject: [PATCH 2/2] services: nginx: 'stop' returns #f.
>
> Previously we'd return #t, which the Shepherd would consider a failure
> to stop the service.
>
> * gnu/services/web.scm (nginx-shepherd-service): In 'nginx-action',
> return #f when stopping the service.
> ---
>  gnu/services/web.scm | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gnu/services/web.scm b/gnu/services/web.scm
> index 1c993b29f..df82a6de6 100644
> --- a/gnu/services/web.scm
> +++ b/gnu/services/web.scm
> @@ -608,7 +608,7 @@ of index files."
>                                 (default-nginx-config config))
>                           #$@args)
>                   (match '#$args
> -                   (("-s" . _) #t)
> +                   (("-s" . _) #f)
>                     (_
>                      ;; When FILE is true, we cannot be sure that PID-FILE will
>                      ;; be created, so assume it won't show up.  When FILE is

^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#32665: Shepherd is stuck waiting for /var/run/nginx/pid
  2018-09-08 17:16 ` Clément Lassieur
@ 2018-09-08 21:03   ` Ludovic Courtès
  0 siblings, 0 replies; 3+ messages in thread
From: Ludovic Courtès @ 2018-09-08 21:03 UTC (permalink / raw)
  To: Clément Lassieur; +Cc: 32665-done

Hello,

Clément Lassieur <clement@lassieur.org> skribis:

> Oh!  Sorry for the mess.  The patches both look good to me, thank you!

Alright, pushed as 985975ae80fe5a8e58319b3a5aaf14da940c4419.

Thanks for the quick reply!

Ludo’.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-09-08 21:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-08 16:53 bug#32665: Shepherd is stuck waiting for /var/run/nginx/pid Ludovic Courtès
2018-09-08 17:16 ` Clément Lassieur
2018-09-08 21:03   ` Ludovic Courtès

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.