From 8163f74542300720f6ee5dc061b79ddf0c345bb8 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Mon, 22 Feb 2021 15:40:30 +0100 Subject: services: postgresql: Define a default value. * gnu/services/databases.scm (postgresql-service-type): Define a default value. --- gnu/services/databases.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gnu/services/databases.scm') diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm index d908b86af8..91ce503e82 100644 --- a/gnu/services/databases.scm +++ b/gnu/services/databases.scm @@ -331,7 +331,9 @@ host all all ::1/128 md5")) (const %postgresql-accounts)) (service-extension profile-service-type - (compose list postgresql-configuration-postgresql)))))) + (compose list postgresql-configuration-postgresql)))) + (default-value (postgresql-configuration + (postgresql postgresql-10))))) (define-deprecated (postgresql-service #:key (postgresql postgresql) (port 5432) -- cgit v1.2.3 From 1a8cfb6d4c767d6cb19689404d7d0bca336ed0d6 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Tue, 23 Feb 2021 11:00:18 +0100 Subject: services: postgresql-roles: Fix race condition. Make sure that the postgresql-roles script is completed before declaring the postgresql-roles service as started. * gnu/services/databases.scm (postgresql-create-roles): Return the command line instead of a program-file. (postgresql-role-shepherd-service): Use fork+exec-command to start the role creation script and wait for its completion before returning. --- gnu/services/databases.scm | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'gnu/services/databases.scm') diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm index 91ce503e82..979f3dd6c8 100644 --- a/gnu/services/databases.scm +++ b/gnu/services/databases.scm @@ -410,13 +410,8 @@ rolname = '" ,name "')) as not_exists;\n" (let ((host (postgresql-role-configuration-host config)) (roles (postgresql-role-configuration-roles config))) - (program-file - "postgresql-create-roles" - #~(begin - (let ((psql #$(file-append postgresql "/bin/psql"))) - (execl psql psql "-a" - "-h" #$host - "-f" #$(roles->queries roles))))))) + #~(let ((psql #$(file-append postgresql "/bin/psql"))) + (list psql "-a" "-h" #$host "-f" #$(roles->queries roles))))) (define (postgresql-role-shepherd-service config) (match-record config @@ -425,10 +420,14 @@ rolname = '" ,name "')) as not_exists;\n" (requirement '(postgres)) (provision '(postgres-roles)) (one-shot? #t) - (start #~(make-forkexec-constructor - (list #$(postgresql-create-roles config)) - #:user "postgres" #:group "postgres" - #:log-file #$log)) + (start + #~(lambda args + (let ((pid (fork+exec-command + #$(postgresql-create-roles config) + #:user "postgres" + #:group "postgres" + #:log-file #$log))) + (zero? (cdr (waitpid pid)))))) (documentation "Create PostgreSQL roles."))))) (define postgresql-role-service-type -- cgit v1.2.3