[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
- [shepherd] branch master updated (24c9640 -> d5ed516), Ludovic Courtès, 2023/06/14
- [shepherd] 05/06: service: Preserve "disabled" flag when replacing.,
Ludovic Courtès <=
- [shepherd] 03/06: herd: Print "disabled" in red when the service was respawned., Ludovic Courtès, 2023/06/14
- [shepherd] 02/06: service: 'start-service' returns #f when dependencies failed to start., Ludovic Courtès, 2023/06/14
- [shepherd] 01/06: service: Always honor the 'enabled?' flag., Ludovic Courtès, 2023/06/14
- [shepherd] 06/06: README: Document use of the Guix channel., Ludovic Courtès, 2023/06/14
- [shepherd] 04/06: tests: Simplify 'tests/replacement.sh'., Ludovic Courtès, 2023/06/14