Unverified Commit 5304c612 authored by Nick Ethier's avatar Nick Ethier
Browse files

drivers/docker: handle shutdown of upgraded tasks correctly

parent e2bc4f3f
Showing with 17 additions and 3 deletions
+17 -3
......@@ -69,7 +69,7 @@ type executorDockerLoggerShim struct {
func (e *executorDockerLoggerShim) Start(*docklog.StartOpts) error { return nil }
func (e *executorDockerLoggerShim) Stop() error {
if err := e.exec.Shutdown("", 0); err != nil {
if err := e.exec.Shutdown("docker", 0); err != nil {
return err
}
......
......@@ -15,6 +15,12 @@ import (
"golang.org/x/net/context"
)
const (
// pre09DockerSignal is used in executor.Shutdown to know if it should
// call the ShutDown RPC on the pre09 executor
pre09DockerSignal = "docker"
)
// Registering these types since we have to serialize and de-serialize the Task
// structs over the wire between drivers and the executor.
func init() {
......@@ -49,8 +55,16 @@ func (l *legacyExecutorWrapper) Wait(ctx context.Context) (*ProcessState, error)
}
func (l *legacyExecutorWrapper) Shutdown(signal string, gracePeriod time.Duration) error {
if err := l.client.ShutDown(); err != nil {
return err
// The legacy docker driver only used the executor to start a syslog server
// for logging. Thus calling ShutDown for docker will always return an error
// because it never started a process through the executor. If signal is set
// to 'docker' then we'll skip the ShutDown RPC and just call Exit.
//
// This is painful to look at but will only be around a few releases
if signal != pre09DockerSignal {
if err := l.client.ShutDown(); err != nil {
return err
}
}
if err := l.client.Exit(); err != nil {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment