summaryrefslogtreecommitdiff
path: root/libcontainerd/supervisor/remote_daemon_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'libcontainerd/supervisor/remote_daemon_linux.go')
-rw-r--r--libcontainerd/supervisor/remote_daemon_linux.go69
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))
+}