guix-commits
[Top][All Lists]
Advanced

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

[shepherd] 05/06: service: Preserve "disabled" flag when replacing.


From: Ludovic Courtès
Subject: [shepherd] 05/06: service: Preserve "disabled" flag when replacing.
Date: Wed, 14 Jun 2023 12:46:25 -0400 (EDT)

civodul pushed a commit to branch master
in repository shepherd.

commit 52db31e5b061440cd110da4848ab230ce09f365a
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Wed Jun 14 18:31:32 2023 +0200

    service: Preserve "disabled" flag when replacing.
    
    Fixes <https://issues.guix.gnu.org/63869>.
    
    * modules/shepherd/service.scm (replace-service): Remove.
    (stop-service): Call 'register-services' instead of 'replace-service'.
    (service-registry): Upon 'register, call 'disable-service' on SERVICE
    when OLD is disabled.
    * tests/replacement.sh: Test it.
    * NEWS: Update.
    
    Reported-by: Attila Lendvai <attila@lendvai.name>
---
 NEWS                         |  7 +++++++
 modules/shepherd/service.scm | 19 +++++++------------
 tests/replacement.sh         |  6 ++++++
 3 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/NEWS b/NEWS
index 45ee3bc..f17a155 100644
--- a/NEWS
+++ b/NEWS
@@ -40,6 +40,13 @@ per-service respawn limits.
 Previously, manually running ‘herd disable SERVICE’ would not prevent SERVICE
 from being respawned or even from being started.  This is now fixed.
 
+** Disabled flag is preserved when replacing a service
+   (<https://issues.guix.gnu.org/63869>)
+
+When replacing a service, for instance by running ‘herd load root conf.scm’ or
+by running ‘guix system reconfigure’, the service replacement starts as
+disabled if the original service was disabled.
+
 ** New Bash completion
 
 A Bash completion file is now installed, providing tab completion for the
diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
index 0980ac4..6b54c3e 100644
--- a/modules/shepherd/service.scm
+++ b/modules/shepherd/service.scm
@@ -872,15 +872,6 @@ while starting ~a: ~s")
                             (service-canonical-name service))
                running)))))))
 
-(define (replace-service old-service new-service)
-  "Replace OLD-SERVICE with NEW-SERVICE in the services registry.  This
-completely removes all references to OLD-SERVICE before registering
-NEW-SERVICE."
-  (when new-service
-    (put-message (current-registry-channel)
-                 `(unregister ,(list old-service)))
-    (register-services (list new-service))))
-
 (define (required-by? service dependent)
   "Returns #t if DEPENDENT directly requires SERVICE in order to run.  Returns
 #f otherwise."
@@ -940,7 +931,7 @@ in a list."
         ;; Replace the service with its replacement, if it has one.
         (let ((replacement (service-replacement service)))
           (when replacement
-            (replace-service service replacement))
+            (register-services (list replacement)))
 
           (cons (or replacement service) stopped-dependents)))))
 
@@ -1113,8 +1104,12 @@ requests arriving on @var{channel}."
                          `(replace-if-running ,service ,reply))
             (match (get-message reply)
               (#t (loop registered))
-              (#f (loop (register service
-                                  (unregister (list old))))))))))
+              (#f
+               (unless (service-enabled? old)
+                 ;; Inherit the disabled flag.
+                 (disable-service service))
+               (loop (register service
+                               (unregister (list old))))))))))
       (('unregister services)                     ;no reply
        (match (remove service-stopped? services)
          (()
diff --git a/tests/replacement.sh b/tests/replacement.sh
index 4b5d29e..2e93555 100644
--- a/tests/replacement.sh
+++ b/tests/replacement.sh
@@ -89,3 +89,9 @@ grep "The replacement is starting" "$log"
 $herd say-hello test && false  # this action should have vanished
 $herd say-goodbye test         # this one is new
 test "`cat $stamp`" = "Goodbye"
+
+# Make sure the "disabled" flag is preserved when replacing.
+$herd stop test
+$herd disable test
+$herd load root "$rconf"
+$herd status test | grep disabled



reply via email to

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