unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#29992: 'postgres' service doesn't stop
@ 2018-01-05 15:32 Clément Lassieur
  2018-01-08 10:59 ` Ludovic Courtès
  0 siblings, 1 reply; 13+ messages in thread
From: Clément Lassieur @ 2018-01-05 15:32 UTC (permalink / raw)
  To: 29992

1. add (postgresql-service) to the service list
2. reconfigure
3. ps -ef | grep postgres

--8<---------------cut here---------------start------------->8---
postgres 19058     1  0 16:21 ?        00:00:00 /gnu/store/0v539yjmdqhjm1xcpvndmagkgjz5fvh2-guile-2.2.2/bin/guile --no-auto-compile /gnu/store/rp6qyfv5wyznz5a1i6szzzy997v603sl-start-postgres                                             
postgres 19061 19058  0 16:21 ?        00:00:00 /gnu/store/3rg0avphlwgq56qjxd8gr8xbmh1rwkal-postgresql-10.1/bin/postgres --config-file=/gnu/store/7m8yrv4avricqkn92737b5mamlvaid34-postgresql.conf -p 5432 -D /var/lib/postgresql/data     
postgres 19063 19061  0 16:21 ?        00:00:00 postgres: checkpointer process
postgres 19064 19061  0 16:21 ?        00:00:00 postgres: writer process
postgres 19065 19061  0 16:21 ?        00:00:00 postgres: wal writer process
postgres 19066 19061  0 16:21 ?        00:00:00 postgres: autovacuum launcher process
postgres 19067 19061  0 16:21 ?        00:00:00 postgres: stats collector process
postgres 19068 19061  0 16:21 ?        00:00:00 postgres: bgworker: logical replication launcher
clement  19070 18802  0 16:21 pts/4    00:00:00 grep postgres
--8<---------------cut here---------------end--------------->8---

4. herd stop postgres (output: Service postgres has been stopped)
5. ps -ef | grep postgres

--8<---------------cut here---------------start------------->8---
postgres 19061     1  0 16:21 ?        00:00:00 /gnu/store/3rg0avphlwgq56qjxd8gr8xbmh1rwkal-postgresql-10.1/bin/postgres --config-file=/gnu/store/7m8yrv4avricqkn92737b5mamlvaid34-postgresql.conf -p 5432 -D /var/lib/postgresql/data     
postgres 19063 19061  0 16:21 ?        00:00:00 postgres: checkpointer process
postgres 19064 19061  0 16:21 ?        00:00:00 postgres: writer process
postgres 19065 19061  0 16:21 ?        00:00:00 postgres: wal writer process
postgres 19066 19061  0 16:21 ?        00:00:00 postgres: autovacuum launcher process                                 
postgres 19067 19061  0 16:21 ?        00:00:00 postgres: stats collector process
postgres 19068 19061  0 16:21 ?        00:00:00 postgres: bgworker: logical replication launcher
clement  19078 18802  0 16:21 pts/4    00:00:00 grep postgres
--8<---------------cut here---------------end--------------->8---

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

* bug#29992: 'postgres' service doesn't stop
  2018-01-05 15:32 bug#29992: 'postgres' service doesn't stop Clément Lassieur
@ 2018-01-08 10:59 ` Ludovic Courtès
  2018-01-08 11:33   ` Clément Lassieur
                     ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Ludovic Courtès @ 2018-01-08 10:59 UTC (permalink / raw)
  To: Clément Lassieur; +Cc: 29992

Hi,

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

> 1. add (postgresql-service) to the service list
> 2. reconfigure
> 3. ps -ef | grep postgres
>
> postgres 19058     1  0 16:21 ?        00:00:00 /gnu/store/0v539yjmdqhjm1xcpvndmagkgjz5fvh2-guile-2.2.2/bin/guile --no-auto-compile /gnu/store/rp6qyfv5wyznz5a1i6szzzy997v603sl-start-postgres                                             
> postgres 19061 19058  0 16:21 ?        00:00:00 /gnu/store/3rg0avphlwgq56qjxd8gr8xbmh1rwkal-postgresql-10.1/bin/postgres --config-file=/gnu/store/7m8yrv4avricqkn92737b5mamlvaid34-postgresql.conf -p 5432 -D /var/lib/postgresql/data     
> postgres 19063 19061  0 16:21 ?        00:00:00 postgres: checkpointer process
> postgres 19064 19061  0 16:21 ?        00:00:00 postgres: writer process
> postgres 19065 19061  0 16:21 ?        00:00:00 postgres: wal writer process
> postgres 19066 19061  0 16:21 ?        00:00:00 postgres: autovacuum launcher process
> postgres 19067 19061  0 16:21 ?        00:00:00 postgres: stats collector process
> postgres 19068 19061  0 16:21 ?        00:00:00 postgres: bgworker: logical replication launcher
> clement  19070 18802  0 16:21 pts/4    00:00:00 grep postgres
>
>
> 4. herd stop postgres (output: Service postgres has been stopped)
> 5. ps -ef | grep postgres
>
> postgres 19061     1  0 16:21 ?        00:00:00 /gnu/store/3rg0avphlwgq56qjxd8gr8xbmh1rwkal-postgresql-10.1/bin/postgres --config-file=/gnu/store/7m8yrv4avricqkn92737b5mamlvaid34-postgresql.conf -p 5432 -D /var/lib/postgresql/data     
> postgres 19063 19061  0 16:21 ?        00:00:00 postgres: checkpointer process
> postgres 19064 19061  0 16:21 ?        00:00:00 postgres: writer process
> postgres 19065 19061  0 16:21 ?        00:00:00 postgres: wal writer process
> postgres 19066 19061  0 16:21 ?        00:00:00 postgres: autovacuum launcher process                                 
> postgres 19067 19061  0 16:21 ?        00:00:00 postgres: stats collector process
> postgres 19068 19061  0 16:21 ?        00:00:00 postgres: bgworker: logical replication launcher
> clement  19078 18802  0 16:21 pts/4    00:00:00 grep postgres

Perhaps the proper way to stop postgresql is via one of its client
commands, like we do for nginx?

HTH,
Ludo’.

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

* bug#29992: 'postgres' service doesn't stop
  2018-01-08 10:59 ` Ludovic Courtès
@ 2018-01-08 11:33   ` Clément Lassieur
  2018-01-08 21:55   ` Alex Kost
  2018-01-24  2:20   ` bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres Clément Lassieur
  2 siblings, 0 replies; 13+ messages in thread
From: Clément Lassieur @ 2018-01-08 11:33 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 29992

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

> Hi,
>
> Clément Lassieur <clement@lassieur.org> skribis:
>
>> 1. add (postgresql-service) to the service list
>> 2. reconfigure
>> 3. ps -ef | grep postgres
>>
>> postgres 19058     1  0 16:21 ?        00:00:00 /gnu/store/0v539yjmdqhjm1xcpvndmagkgjz5fvh2-guile-2.2.2/bin/guile --no-auto-compile /gnu/store/rp6qyfv5wyznz5a1i6szzzy997v603sl-start-postgres                                             
>> postgres 19061 19058  0 16:21 ?        00:00:00 /gnu/store/3rg0avphlwgq56qjxd8gr8xbmh1rwkal-postgresql-10.1/bin/postgres --config-file=/gnu/store/7m8yrv4avricqkn92737b5mamlvaid34-postgresql.conf -p 5432 -D /var/lib/postgresql/data     
>> postgres 19063 19061  0 16:21 ?        00:00:00 postgres: checkpointer process
>> postgres 19064 19061  0 16:21 ?        00:00:00 postgres: writer process
>> postgres 19065 19061  0 16:21 ?        00:00:00 postgres: wal writer process
>> postgres 19066 19061  0 16:21 ?        00:00:00 postgres: autovacuum launcher process
>> postgres 19067 19061  0 16:21 ?        00:00:00 postgres: stats collector process
>> postgres 19068 19061  0 16:21 ?        00:00:00 postgres: bgworker: logical replication launcher
>> clement  19070 18802  0 16:21 pts/4    00:00:00 grep postgres
>>
>>
>> 4. herd stop postgres (output: Service postgres has been stopped)
>> 5. ps -ef | grep postgres
>>
>> postgres 19061     1  0 16:21 ?        00:00:00 /gnu/store/3rg0avphlwgq56qjxd8gr8xbmh1rwkal-postgresql-10.1/bin/postgres --config-file=/gnu/store/7m8yrv4avricqkn92737b5mamlvaid34-postgresql.conf -p 5432 -D /var/lib/postgresql/data     
>> postgres 19063 19061  0 16:21 ?        00:00:00 postgres: checkpointer process
>> postgres 19064 19061  0 16:21 ?        00:00:00 postgres: writer process
>> postgres 19065 19061  0 16:21 ?        00:00:00 postgres: wal writer process
>> postgres 19066 19061  0 16:21 ?        00:00:00 postgres: autovacuum launcher process                                 
>> postgres 19067 19061  0 16:21 ?        00:00:00 postgres: stats collector process
>> postgres 19068 19061  0 16:21 ?        00:00:00 postgres: bgworker: logical replication launcher
>> clement  19078 18802  0 16:21 pts/4    00:00:00 grep postgres
>
> Perhaps the proper way to stop postgresql is via one of its client
> commands, like we do for nginx?

Hi Ludovic,

Yes, probably.  I'll fix this when I have some time this week.

Clément

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

* bug#29992: 'postgres' service doesn't stop
  2018-01-08 10:59 ` Ludovic Courtès
  2018-01-08 11:33   ` Clément Lassieur
@ 2018-01-08 21:55   ` Alex Kost
  2018-01-12  9:46     ` Catonano
  2018-01-24  2:20   ` bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres Clément Lassieur
  2 siblings, 1 reply; 13+ messages in thread
From: Alex Kost @ 2018-01-08 21:55 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 29992, Clément Lassieur

Ludovic Courtès (2018-01-08 11:59 +0100) wrote:

> Perhaps the proper way to stop postgresql is via one of its client
> commands, like we do for nginx?

Regarding the commands: "pg_ctl" is the canonical tool to start/stop
PostgreSQL server.

Note: I don't use the Guix service for postgresql (instead I run
postgres via my Shepherd user instance).

-- 
Alex

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

* bug#29992: 'postgres' service doesn't stop
  2018-01-08 21:55   ` Alex Kost
@ 2018-01-12  9:46     ` Catonano
  2018-01-12 21:42       ` Danny Milosavljevic
  0 siblings, 1 reply; 13+ messages in thread
From: Catonano @ 2018-01-12  9:46 UTC (permalink / raw)
  To: Alex Kost; +Cc: 29992, Clément Lassieur

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

2018-01-08 22:55 GMT+01:00 Alex Kost <alezost@gmail.com>:

> Ludovic Courtès (2018-01-08 11:59 +0100) wrote:
>
> > Perhaps the proper way to stop postgresql is via one of its client
> > commands, like we do for nginx?
>
> Regarding the commands: "pg_ctl" is the canonical tool to start/stop
> PostgreSQL server.
>
> Note: I don't use the Guix service for postgresql (instead I run
> postgres via my Shepherd user instance).
>
> --
> Alex
>

I'm sorry if this isn't the place to write about this

My Tryton service doesn't get stopped either

Here's a picture I took from a virtual machine
https://imgur.com/a/LJ2Cq

When I run Tryton myself, I use this line:
trytond -c trytond.conf

this command doesn' t return a prompt
So, in order to stop Tryton I simply press Ctrl-C

In the definition of my sevice, I use
#~(make-kill-destructor)

to stop the Tryton service

But I copied this from other services, I don't know what
"make-kill-destructor" does

My Trytond service is not working anyway, I launch a vm with my service
running in it, I test  it with the client, I see it doesn't work, I stop it
and then I'd like to launch it by hand to see something more

But then, because a tryton-real daemon is still running, the socket for
that address is already bound, as you can see in the picture

Of course this has nothing to do with the Postgresql not stopping bug, I
was only giving some context

[-- Attachment #2: Type: text/html, Size: 2378 bytes --]

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

* bug#29992: 'postgres' service doesn't stop
  2018-01-12  9:46     ` Catonano
@ 2018-01-12 21:42       ` Danny Milosavljevic
  0 siblings, 0 replies; 13+ messages in thread
From: Danny Milosavljevic @ 2018-01-12 21:42 UTC (permalink / raw)
  To: Catonano; +Cc: Alex Kost, 29992, Clément Lassieur

Hi Catonano,

> When I run Tryton myself, I use this line:
> trytond -c trytond.conf
> this command doesn' t return a prompt

Does it stay in foreground with the tryton service, too?  It shouldn't do that for the service, see below.

make-forkexec-constructor should takes a pid-file argument which is supposed to refer to a file that trytond creates.  If that isn't specified, shepherd will default to the pid of the child process of shepherd that did the exec().  So it shouldn't have tryton in foreground in any case.

Note: make-forkexec-constructor also has a #:log-file keyword argument - which is handy for debugging.

> So, in order to stop Tryton I simply press Ctrl-C
> 
> In the definition of my sevice, I use
> #~(make-kill-destructor)
> 
> to stop the Tryton service
> 
> But I copied this from other services, I don't know what
> "make-kill-destructor" does

(define make-kill-destructor
  (lambda* (#:optional (signal SIGTERM))
    (lambda (pid . args)
      (kill pid signal)
      #f)))

So it sends SIGTERM to the process.

What happens when you send SIGTERM manually ("kill -TERM ...")?

> My Trytond service is not working anyway, I launch a vm with my service
> running in it, I test  it with the client, I see it doesn't work, I stop it
> and then I'd like to launch it by hand to see something more

You can try finding its pid with "ps -ef |grep tryton" and then compare their /proc/<pid> trees (manually started vs. service-started).

In your screenshot, that would be /proc/411, especially /proc/411/fd and its signal mask (in /proc/411/status).

> But then, because a tryton-real daemon is still running, the socket for
> that address is already bound, as you can see in the picture

That's good then.

Try "netstat -lpn | grep 411" (or whatever the pid is now) to find out whether it's actually listening.

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

* bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres.
  2018-01-08 10:59 ` Ludovic Courtès
  2018-01-08 11:33   ` Clément Lassieur
  2018-01-08 21:55   ` Alex Kost
@ 2018-01-24  2:20   ` Clément Lassieur
  2018-01-24 15:04     ` Ludovic Courtès
  2 siblings, 1 reply; 13+ messages in thread
From: Clément Lassieur @ 2018-01-24  2:20 UTC (permalink / raw)
  To: 29992

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

* gnu/services/databases.scm (postgresql-shepherd-service): Replace
make-forkexec-constructor and make-kill-destructor with pg_ctl.
---
 gnu/services/databases.scm | 39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 6a01cb1ce..42f2315d5 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -147,26 +147,33 @@ host	all	all	::1/128 	trust"))
 (define postgresql-shepherd-service
   (match-lambda
     (($ <postgresql-configuration> postgresql port locale config-file data-directory)
-     (let ((start-script
-            ;; Wrapper script that switches to the 'postgres' user before
-            ;; launching daemon.
-            (program-file "start-postgres"
-                          #~(let ((user (getpwnam "postgres"))
-                                  (postgres (string-append #$postgresql
-                                                           "/bin/postgres")))
-                              (setgid (passwd:gid user))
-                              (setuid (passwd:uid user))
-                              (system* postgres
-                                       (string-append "--config-file="
-                                                      #$config-file)
-                                       "-p" (number->string #$port)
-                                       "-D" #$data-directory)))))
+     (let* ((pg_ctl-wrapper
+             ;; Wrapper script that switches to the 'postgres' user before
+             ;; launching daemon.
+             (program-file
+              "pg_ctl-wrapper"
+              #~(begin
+                  (use-modules (ice-9 match)
+                               (ice-9 format))
+                  (match (command-line)
+                    ((_ mode)
+                     (let ((user (getpwnam "postgres"))
+                           (pg_ctl #$(file-append postgresql "/bin/pg_ctl")))
+                       (setgid (passwd:gid user))
+                       (setuid (passwd:uid user))
+                       (system
+                        (format #f "~a -D ~a -o '--config-file=~a -p ~d' ~a"
+                                pg_ctl #$data-directory #$config-file #$port
+                                mode))))))))
+            (action (lambda args
+                      #~(lambda _
+                          (invoke #$pg_ctl-wrapper #$@args)))))
        (list (shepherd-service
               (provision '(postgres))
               (documentation "Run the PostgreSQL daemon.")
               (requirement '(user-processes loopback syslogd))
-              (start #~(make-forkexec-constructor #$start-script))
-              (stop #~(make-kill-destructor))))))))
+              (start (action "start"))
+              (stop (action "stop"))))))))
 
 (define postgresql-service-type
   (service-type (name 'postgresql)
-- 
2.16.0

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

* bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres.
  2018-01-24  2:20   ` bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres Clément Lassieur
@ 2018-01-24 15:04     ` Ludovic Courtès
  2018-01-24 17:16       ` Clément Lassieur
  2018-01-25 13:20       ` Clément Lassieur
  0 siblings, 2 replies; 13+ messages in thread
From: Ludovic Courtès @ 2018-01-24 15:04 UTC (permalink / raw)
  To: Clément Lassieur; +Cc: 29992

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

> Fixes <https://bugs.gnu.org/29992>.
>
> * gnu/services/databases.scm (postgresql-shepherd-service): Replace
> make-forkexec-constructor and make-kill-destructor with pg_ctl.

[...]

> +     (let* ((pg_ctl-wrapper
> +             ;; Wrapper script that switches to the 'postgres' user before
> +             ;; launching daemon.
> +             (program-file
> +              "pg_ctl-wrapper"
> +              #~(begin
> +                  (use-modules (ice-9 match)
> +                               (ice-9 format))
> +                  (match (command-line)
> +                    ((_ mode)
> +                     (let ((user (getpwnam "postgres"))
> +                           (pg_ctl #$(file-append postgresql "/bin/pg_ctl")))
> +                       (setgid (passwd:gid user))
> +                       (setuid (passwd:uid user))
> +                       (system
> +                        (format #f "~a -D ~a -o '--config-file=~a -p ~d' ~a"
> +                                pg_ctl #$data-directory #$config-file #$port
> +                                mode))))))))

I think we should use ‘execl’ here instead of ‘system’ so that (1) the
exit code is correct, and (2) we don’t go through /bin/sh.

Apart from that it LGTM, thank you!

Ludo’.

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

* bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres.
  2018-01-24 15:04     ` Ludovic Courtès
@ 2018-01-24 17:16       ` Clément Lassieur
  2018-01-25 13:13         ` Clément Lassieur
  2018-01-25 13:20       ` Clément Lassieur
  1 sibling, 1 reply; 13+ messages in thread
From: Clément Lassieur @ 2018-01-24 17:16 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 29992

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

> Clément Lassieur <clement@lassieur.org> skribis:
>
>> Fixes <https://bugs.gnu.org/29992>.
>>
>> * gnu/services/databases.scm (postgresql-shepherd-service): Replace
>> make-forkexec-constructor and make-kill-destructor with pg_ctl.
>
> [...]
>
>> +     (let* ((pg_ctl-wrapper
>> +             ;; Wrapper script that switches to the 'postgres' user before
>> +             ;; launching daemon.
>> +             (program-file
>> +              "pg_ctl-wrapper"
>> +              #~(begin
>> +                  (use-modules (ice-9 match)
>> +                               (ice-9 format))
>> +                  (match (command-line)
>> +                    ((_ mode)
>> +                     (let ((user (getpwnam "postgres"))
>> +                           (pg_ctl #$(file-append postgresql "/bin/pg_ctl")))
>> +                       (setgid (passwd:gid user))
>> +                       (setuid (passwd:uid user))
>> +                       (system
>> +                        (format #f "~a -D ~a -o '--config-file=~a -p ~d' ~a"
>> +                                pg_ctl #$data-directory #$config-file #$port
>> +                                mode))))))))
>
> I think we should use ‘execl’ here instead of ‘system’ so that (1) the
> exit code is correct, and (2) we don’t go through /bin/sh.

Hi Ludovic, thank you for the review.

How do you pass single quotes as an ‘execl’ argument?

https://www.postgresql.org/docs/9.3/static/app-pg-ctl.html says:
--8<---------------cut here---------------start------------->8---
-o options
    Specifies options to be passed directly to the postgres command.
    The options should usually be surrounded by single or double quotes
    to ensure that they are passed through as a group.
--8<---------------cut here---------------end--------------->8---

Also, I don't understand how the exit code matters since Guile scripts
seem to always return 0, no matter if the last return value is true or
false.

Clément

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

* bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres.
  2018-01-24 17:16       ` Clément Lassieur
@ 2018-01-25 13:13         ` Clément Lassieur
  0 siblings, 0 replies; 13+ messages in thread
From: Clément Lassieur @ 2018-01-25 13:13 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 29992

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

> Ludovic Courtès <ludo@gnu.org> writes:
>
>> Clément Lassieur <clement@lassieur.org> skribis:
>>
>>> Fixes <https://bugs.gnu.org/29992>.
>>>
>>> * gnu/services/databases.scm (postgresql-shepherd-service): Replace
>>> make-forkexec-constructor and make-kill-destructor with pg_ctl.
>>
>> [...]
>>
>>> +     (let* ((pg_ctl-wrapper
>>> +             ;; Wrapper script that switches to the 'postgres' user before
>>> +             ;; launching daemon.
>>> +             (program-file
>>> +              "pg_ctl-wrapper"
>>> +              #~(begin
>>> +                  (use-modules (ice-9 match)
>>> +                               (ice-9 format))
>>> +                  (match (command-line)
>>> +                    ((_ mode)
>>> +                     (let ((user (getpwnam "postgres"))
>>> +                           (pg_ctl #$(file-append postgresql "/bin/pg_ctl")))
>>> +                       (setgid (passwd:gid user))
>>> +                       (setuid (passwd:uid user))
>>> +                       (system
>>> +                        (format #f "~a -D ~a -o '--config-file=~a -p ~d' ~a"
>>> +                                pg_ctl #$data-directory #$config-file #$port
>>> +                                mode))))))))
>>
>> I think we should use ‘execl’ here instead of ‘system’ so that (1) the
>> exit code is correct, and (2) we don’t go through /bin/sh.
>
> Hi Ludovic, thank you for the review.
>
> How do you pass single quotes as an ‘execl’ argument?
>
> https://www.postgresql.org/docs/9.3/static/app-pg-ctl.html says:
> --8<---------------cut here---------------start------------->8---
> -o options
>     Specifies options to be passed directly to the postgres command.
>     The options should usually be surrounded by single or double quotes
>     to ensure that they are passed through as a group.
> --8<---------------cut here---------------end--------------->8---

Oh I understood this.  I'll do a new patch.

> Also, I don't understand how the exit code matters since Guile scripts
> seem to always return 0, no matter if the last return value is true or
> false.
>
> Clément

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

* bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres.
  2018-01-24 15:04     ` Ludovic Courtès
  2018-01-24 17:16       ` Clément Lassieur
@ 2018-01-25 13:20       ` Clément Lassieur
  2018-01-25 14:22         ` Ludovic Courtès
  1 sibling, 1 reply; 13+ messages in thread
From: Clément Lassieur @ 2018-01-25 13:20 UTC (permalink / raw)
  To: 29992

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

* gnu/services/databases.scm (postgresql-shepherd-service): Replace
make-forkexec-constructor and make-kill-destructor with pg_ctl.
---
 gnu/services/databases.scm | 40 ++++++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 16 deletions(-)

diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 6a01cb1ce..b34a67aa9 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -147,26 +148,33 @@ host	all	all	::1/128 	trust"))
 (define postgresql-shepherd-service
   (match-lambda
     (($ <postgresql-configuration> postgresql port locale config-file data-directory)
-     (let ((start-script
-            ;; Wrapper script that switches to the 'postgres' user before
-            ;; launching daemon.
-            (program-file "start-postgres"
-                          #~(let ((user (getpwnam "postgres"))
-                                  (postgres (string-append #$postgresql
-                                                           "/bin/postgres")))
-                              (setgid (passwd:gid user))
-                              (setuid (passwd:uid user))
-                              (system* postgres
-                                       (string-append "--config-file="
-                                                      #$config-file)
-                                       "-p" (number->string #$port)
-                                       "-D" #$data-directory)))))
+     (let* ((pg_ctl-wrapper
+             ;; Wrapper script that switches to the 'postgres' user before
+             ;; launching daemon.
+             (program-file
+              "pg_ctl-wrapper"
+              #~(begin
+                  (use-modules (ice-9 match)
+                               (ice-9 format))
+                  (match (command-line)
+                    ((_ mode)
+                     (let ((user (getpwnam "postgres"))
+                           (pg_ctl #$(file-append postgresql "/bin/pg_ctl"))
+                           (options (format #f "--config-file=~a -p ~d"
+                                            #$config-file #$port)))
+                       (setgid (passwd:gid user))
+                       (setuid (passwd:uid user))
+                       (execl pg_ctl pg_ctl "-D" #$data-directory "-o" options
+                              mode)))))))
+            (action (lambda args
+                      #~(lambda _
+                          (invoke #$pg_ctl-wrapper #$@args)))))
        (list (shepherd-service
               (provision '(postgres))
               (documentation "Run the PostgreSQL daemon.")
               (requirement '(user-processes loopback syslogd))
-              (start #~(make-forkexec-constructor #$start-script))
-              (stop #~(make-kill-destructor))))))))
+              (start (action "start"))
+              (stop (action "stop"))))))))
 
 (define postgresql-service-type
   (service-type (name 'postgresql)
-- 
2.16.1

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

* bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres.
  2018-01-25 13:20       ` Clément Lassieur
@ 2018-01-25 14:22         ` Ludovic Courtès
  2018-01-25 14:56           ` Clément Lassieur
  0 siblings, 1 reply; 13+ messages in thread
From: Ludovic Courtès @ 2018-01-25 14:22 UTC (permalink / raw)
  To: Clément Lassieur; +Cc: 29992

Hello,

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

> Fixes <https://bugs.gnu.org/29992>.
>
> * gnu/services/databases.scm (postgresql-shepherd-service): Replace
> make-forkexec-constructor and make-kill-destructor with pg_ctl.

LGTM, thanks!

In the future we should add a postgresql service test, perhaps it could
share code with the mysql test in (gnu tests databases).

Ludo’.

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

* bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres.
  2018-01-25 14:22         ` Ludovic Courtès
@ 2018-01-25 14:56           ` Clément Lassieur
  0 siblings, 0 replies; 13+ messages in thread
From: Clément Lassieur @ 2018-01-25 14:56 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 29992-done

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

> Hello,
>
> Clément Lassieur <clement@lassieur.org> skribis:
>
>> Fixes <https://bugs.gnu.org/29992>.
>>
>> * gnu/services/databases.scm (postgresql-shepherd-service): Replace
>> make-forkexec-constructor and make-kill-destructor with pg_ctl.
>
> LGTM, thanks!

Pushed as 5ee4cd69c47b77e534654a130b1264ad05809943.

> In the future we should add a postgresql service test, perhaps it could
> share code with the mysql test in (gnu tests databases).

Uh-huh I was scared that you would ask this!  I'll add it to my todo
list then. :-)

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

end of thread, other threads:[~2018-01-25 14:57 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-05 15:32 bug#29992: 'postgres' service doesn't stop Clément Lassieur
2018-01-08 10:59 ` Ludovic Courtès
2018-01-08 11:33   ` Clément Lassieur
2018-01-08 21:55   ` Alex Kost
2018-01-12  9:46     ` Catonano
2018-01-12 21:42       ` Danny Milosavljevic
2018-01-24  2:20   ` bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres Clément Lassieur
2018-01-24 15:04     ` Ludovic Courtès
2018-01-24 17:16       ` Clément Lassieur
2018-01-25 13:13         ` Clément Lassieur
2018-01-25 13:20       ` Clément Lassieur
2018-01-25 14:22         ` Ludovic Courtès
2018-01-25 14:56           ` Clément Lassieur

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).