guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: gnu: Fix memcached service startup.


From: Christopher Baines
Subject: 01/01: gnu: Fix memcached service startup.
Date: Tue, 15 Aug 2017 17:24:30 -0400 (EDT)

cbaines pushed a commit to branch master
in repository guix.

commit 6230e155afd8c43c12ee3f03032aac34433db11a
Author: Christopher Baines <address@hidden>
Date:   Sat Aug 5 22:32:24 2017 +0100

    gnu: Fix memcached service startup.
    
    Memcached changes to the memcached user from root before writing the PID
    file. This means that it must be able to write the PID file as the memcached
    user.
    
    To make this work, create the /var/run/memcached directory when the service
    starts, make it owned by memcached, and change memcached to write the PID 
file
    to /var/run/memcached/pid.
    
    This wasn't picked up by the system test as the "service running" part was 
too
    permissive, and only failed on an error. Instead, test the response from
    calling start-service and check that the PID is a number.
    
    * gnu/services/databases.scm (memcached-activation): New variable.
      (memcached-shepherd-service): Change PID file location.
      (memcached-service-type): Extend the activation-service-type.
    * gnu/tests/databases.scm (run-memcached-test)[test]: Change the "service
      running" test to check the response from the shepherd.
---
 gnu/services/databases.scm | 17 +++++++++++++++--
 gnu/tests/databases.scm    | 10 ++++++----
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 3b64d0e..de1f6b8 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -216,6 +216,14 @@ and stores the database cluster in @var{data-directory}."
          (home-directory "/var/empty")
          (shell (file-append shadow "/sbin/nologin")))))
 
+(define memcached-activation
+  #~(begin
+      (use-modules (guix build utils))
+      (let ((user (getpwnam "memcached")))
+        (mkdir-p "/var/run/memcached")
+        (chown "/var/run/memcached"
+               (passwd:uid user) (passwd:gid user)))))
+
 (define memcached-shepherd-service
   (match-lambda
     (($ <memcached-configuration> memcached interfaces tcp-port udp-port
@@ -233,11 +241,14 @@ and stores the database cluster in @var{data-directory}."
                           "-p" #$(number->string tcp-port)
                           "-U" #$(number->string udp-port)
                           "--daemon"
-                          "-P" "/var/run/memcached.pid"
+                          ;; Memcached changes to the memcached user prior to
+                          ;; writing the pid file, so write it to a directory
+                          ;; that memcached owns.
+                          "-P" "/var/run/memcached/pid"
                           "-u" "memcached"
                           ,address@hidden)
                         #:log-file "/var/log/memcached"
-                        #:pid-file "/var/run/memcached.pid"))
+                        #:pid-file "/var/run/memcached/pid"))
               (stop #~(make-kill-destructor))))))))
 
 (define memcached-service-type
@@ -245,6 +256,8 @@ and stores the database cluster in @var{data-directory}."
                 (extensions
                  (list (service-extension shepherd-root-service-type
                                           memcached-shepherd-service)
+                       (service-extension activation-service-type
+                                          (const memcached-activation))
                        (service-extension account-service-type
                                           (const %memcached-accounts))))
                 (default-value (memcached-configuration))))
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index 310210c..9d9a753 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -63,13 +63,15 @@
           (test-begin "memcached")
 
           ;; Wait for memcached to be up and running.
-          (test-eq "service running"
-            'running!
+          (test-assert "service running"
             (marionette-eval
              '(begin
                 (use-modules (gnu services herd))
-                (start-service 'memcached)
-                'running!)
+                (match (start-service 'memcached)
+                  (#f #f)
+                  (('service response-parts ...)
+                   (match (assq-ref response-parts 'running)
+                     ((pid) (number? pid))))))
              marionette))
 
           (let* ((ai (car (getaddrinfo "localhost"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]