diff options
author | Sebastiaan van Stijn <github@gone.nl> | 2020-12-22 10:43:01 +0100 |
---|---|---|
committer | Sebastiaan van Stijn <github@gone.nl> | 2020-12-22 10:51:17 +0100 |
commit | f3d0f7054dbc2e2bcd959cd4c7fc3a8fa097d525 (patch) | |
tree | 7d3ac5a41a6cbbc35a37e6afe0a9bf58f458739f | |
parent | aa1ada6b2a8d19775f47a63dd60c8edbe307eccb (diff) | |
download | docker-f3d0f7054dbc2e2bcd959cd4c7fc3a8fa097d525.tar.gz |
cmd/dockerd: sd_notify STOPPING=1 when shutting down
Signal systemd when we start shutting down to complement the "READY" notify
that was originally implemented in 97088ebef7c638f8175d7c61934642eeb2c054c4
From [sd_notify(3)](https://www.freedesktop.org/software/systemd/man/sd_notify.html#STOPPING=1)
> STOPPING=1
> Tells the service manager that the service is beginning its shutdown. This is useful
> to allow the service manager to track the service's internal state, and present it to
> the user.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
-rw-r--r-- | cmd/dockerd/daemon.go | 6 | ||||
-rw-r--r-- | cmd/dockerd/daemon_freebsd.go | 12 | ||||
-rw-r--r-- | cmd/dockerd/daemon_linux.go | 13 | ||||
-rw-r--r-- | cmd/dockerd/daemon_windows.go | 12 |
4 files changed, 29 insertions, 14 deletions
diff --git a/cmd/dockerd/daemon.go b/cmd/dockerd/daemon.go index 96c31943fa..7fe8a6cbc6 100644 --- a/cmd/dockerd/daemon.go +++ b/cmd/dockerd/daemon.go @@ -184,7 +184,7 @@ func (cli *DaemonCli) start(opts *daemonOptions) (err error) { }, logrus.StandardLogger()) // Notify that the API is active, but before daemon is set up. - preNotifySystem() + preNotifyReady() pluginStore := plugin.NewStore() @@ -242,13 +242,15 @@ func (cli *DaemonCli) start(opts *daemonOptions) (err error) { go cli.api.Wait(serveAPIWait) // after the daemon is done setting up we can notify systemd api - notifySystem() + notifyReady() // Daemon is fully initialized and handling API traffic // Wait for serve API to complete errAPI := <-serveAPIWait c.Cleanup() + // notify systemd that we're shutting down + notifyStopping() shutdownDaemon(d) // Stop notification processing and any background processes diff --git a/cmd/dockerd/daemon_freebsd.go b/cmd/dockerd/daemon_freebsd.go index 6d013b8103..1bb49047c7 100644 --- a/cmd/dockerd/daemon_freebsd.go +++ b/cmd/dockerd/daemon_freebsd.go @@ -1,9 +1,13 @@ package main -// preNotifySystem sends a message to the host when the API is active, but before the daemon is -func preNotifySystem() { +// preNotifyReady sends a message to the host when the API is active, but before the daemon is +func preNotifyReady() { } -// notifySystem sends a message to the host when the server is ready to be used -func notifySystem() { +// notifyReady sends a message to the host when the server is ready to be used +func notifyReady() { +} + +// notifyStopping sends a message to the host when the server is shutting down +func notifyStopping() { } diff --git a/cmd/dockerd/daemon_linux.go b/cmd/dockerd/daemon_linux.go index 1e7a2ca64e..aade57a8d3 100644 --- a/cmd/dockerd/daemon_linux.go +++ b/cmd/dockerd/daemon_linux.go @@ -2,12 +2,17 @@ package main import systemdDaemon "github.com/coreos/go-systemd/v22/daemon" -// preNotifySystem sends a message to the host when the API is active, but before the daemon is -func preNotifySystem() { +// preNotifyReady sends a message to the host when the API is active, but before the daemon is +func preNotifyReady() { } -// notifySystem sends a message to the host when the server is ready to be used -func notifySystem() { +// notifyReady sends a message to the host when the server is ready to be used +func notifyReady() { // Tell the init daemon we are accepting requests go systemdDaemon.SdNotify(false, systemdDaemon.SdNotifyReady) } + +// notifyStopping sends a message to the host when the server is shutting down +func notifyStopping() { + go systemdDaemon.SdNotify(false, systemdDaemon.SdNotifyStopping) +} diff --git a/cmd/dockerd/daemon_windows.go b/cmd/dockerd/daemon_windows.go index 2d74531d46..1a9c50b21f 100644 --- a/cmd/dockerd/daemon_windows.go +++ b/cmd/dockerd/daemon_windows.go @@ -27,8 +27,8 @@ func getDaemonConfDir(root string) (string, error) { return filepath.Join(root, `\config`), nil } -// preNotifySystem sends a message to the host when the API is active, but before the daemon is -func preNotifySystem() { +// preNotifyReady sends a message to the host when the API is active, but before the daemon is +func preNotifyReady() { // start the service now to prevent timeouts waiting for daemon to start // but still (eventually) complete all requests that are sent after this if service != nil { @@ -39,8 +39,12 @@ func preNotifySystem() { } } -// notifySystem sends a message to the host when the server is ready to be used -func notifySystem() { +// notifyReady sends a message to the host when the server is ready to be used +func notifyReady() { +} + +// notifyStopping sends a message to the host when the server is shutting down +func notifyStopping() { } // notifyShutdown is called after the daemon shuts down but before the process exits. |