diff options
Diffstat (limited to 'libcontainerd/supervisor/remote_daemon_linux.go')
-rw-r--r-- | libcontainerd/supervisor/remote_daemon_linux.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/libcontainerd/supervisor/remote_daemon_linux.go b/libcontainerd/supervisor/remote_daemon_linux.go new file mode 100644 index 0000000000..1ea91d2b5d --- /dev/null +++ b/libcontainerd/supervisor/remote_daemon_linux.go @@ -0,0 +1,69 @@ +package supervisor // import "github.com/docker/docker/libcontainerd/supervisor" + +import ( + "os" + "path/filepath" + "syscall" + "time" + + "github.com/containerd/containerd/defaults" + "github.com/docker/docker/pkg/system" +) + +const ( + sockFile = "docker-containerd.sock" + debugSockFile = "docker-containerd-debug.sock" +) + +func (r *remote) setDefaults() { + if r.GRPC.Address == "" { + r.GRPC.Address = filepath.Join(r.stateDir, sockFile) + } + if r.GRPC.MaxRecvMsgSize == 0 { + r.GRPC.MaxRecvMsgSize = defaults.DefaultMaxRecvMsgSize + } + if r.GRPC.MaxSendMsgSize == 0 { + r.GRPC.MaxSendMsgSize = defaults.DefaultMaxSendMsgSize + } + if r.Debug.Address == "" { + r.Debug.Address = filepath.Join(r.stateDir, debugSockFile) + } + if r.OOMScore == 0 { + r.OOMScore = -999 + } + + for key, conf := range r.pluginConfs.Plugins { + if conf == nil { + r.DisabledPlugins = append(r.DisabledPlugins, key) + delete(r.pluginConfs.Plugins, key) + } + } +} + +func (r *remote) stopDaemon() { + // Ask the daemon to quit + syscall.Kill(r.daemonPid, syscall.SIGTERM) + // Wait up to 15secs for it to stop + for i := time.Duration(0); i < shutdownTimeout; i += time.Second { + if !system.IsProcessAlive(r.daemonPid) { + break + } + time.Sleep(time.Second) + } + + if system.IsProcessAlive(r.daemonPid) { + r.logger.WithField("pid", r.daemonPid).Warn("daemon didn't stop within 15 secs, killing it") + syscall.Kill(r.daemonPid, syscall.SIGKILL) + } +} + +func (r *remote) killDaemon() { + // Try to get a stack trace + syscall.Kill(r.daemonPid, syscall.SIGUSR1) + <-time.After(100 * time.Millisecond) + system.KillProcess(r.daemonPid) +} + +func (r *remote) platformCleanup() { + os.Remove(filepath.Join(r.stateDir, sockFile)) +} |