diff --git a/pkg/api/service.go b/pkg/api/service.go index b86aad35..94d54019 100644 --- a/pkg/api/service.go +++ b/pkg/api/service.go @@ -69,9 +69,6 @@ type ServiceSpec struct { Ports []PortSpec // Replicas is the number of containers to run for the service. Only valid for a replicated service. Replicas uint `json:",omitempty"` - // StopGracePeriod is how long to wait after SIGTERM before sending SIGKILL when stopping a container. - // Default is 10 seconds if not specified. - StopGracePeriod *time.Duration `json:",omitempty"` // UpdateConfig configures how the service is updated during a deployment. UpdateConfig UpdateConfig // Volumes is list of data volumes that can be mounted into the container. @@ -265,6 +262,9 @@ type ContainerSpec struct { PullPolicy string // Resource allocation for the container. Resources ContainerResources + // StopGracePeriod is how long to wait after SIGTERM before sending SIGKILL when stopping the container. + // Default is 10 seconds if not specified. + StopGracePeriod *time.Duration `json:",omitempty"` // Namespaced kernel parameters to be set in the container. Sysctls map[string]string // User overrides the default user of the image used to run the container. Format: user|UID[:group|GID]. diff --git a/pkg/client/compose/service.go b/pkg/client/compose/service.go index adabd216..9636cd20 100644 --- a/pkg/client/compose/service.go +++ b/pkg/client/compose/service.go @@ -88,7 +88,7 @@ func ServiceSpecFromCompose(project *types.Project, serviceName string) (api.Ser if service.StopGracePeriod != nil { d := time.Duration(*service.StopGracePeriod) - spec.StopGracePeriod = &d + spec.Container.StopGracePeriod = &d } if service.Scale != nil { diff --git a/pkg/client/compose/service_test.go b/pkg/client/compose/service_test.go index 074ee79e..eb8cec30 100644 --- a/pkg/client/compose/service_test.go +++ b/pkg/client/compose/service_test.go @@ -147,6 +147,7 @@ func TestServiceSpecFromCompose(t *testing.T) { {Count: -1, Capabilities: [][]string{{"gpu"}}}, }, }, + StopGracePeriod: new(30 * time.Second), Sysctls: map[string]string{ "net.ipv4.ip_forward": "1", }, @@ -207,8 +208,7 @@ func TestServiceSpecFromCompose(t *testing.T) { Placement: api.Placement{ Machines: []string{"machine-1", "machine-2"}, }, - Replicas: 3, - StopGracePeriod: api.AsPtr(30 * time.Second), + Replicas: 3, UpdateConfig: api.UpdateConfig{ Order: api.UpdateOrderStopFirst, MonitorPeriod: &api.DefaultHealthMonitorPeriod, diff --git a/pkg/client/deploy/strategy.go b/pkg/client/deploy/strategy.go index 5bf8fb67..9a5617c6 100644 --- a/pkg/client/deploy/strategy.go +++ b/pkg/client/deploy/strategy.go @@ -183,7 +183,7 @@ func (s *RollingStrategy) planReplicated(svc *api.Service, spec api.ServiceSpec) OldContainer: ctr, Order: order, SkipHealthMonitor: s.SkipHealthMonitor, - StopGracePeriod: spec.StopGracePeriod, + StopGracePeriod: spec.Container.StopGracePeriod, }) } @@ -194,7 +194,7 @@ func (s *RollingStrategy) planReplicated(svc *api.Service, spec api.ServiceSpec) MachineID: mid, MachineName: machineNames[mid], Container: c, - StopGracePeriod: spec.StopGracePeriod, + StopGracePeriod: spec.Container.StopGracePeriod, }) } } @@ -260,7 +260,7 @@ func (s *RollingStrategy) planGlobal(svc *api.Service, spec api.ServiceSpec) (Se MachineID: c.MachineID, MachineName: machineNames[c.MachineID], Container: c.Container, - StopGracePeriod: spec.StopGracePeriod, + StopGracePeriod: spec.Container.StopGracePeriod, }) } } @@ -318,7 +318,7 @@ func reconcileGlobalContainer( MachineID: old.MachineID, MachineName: machine.Name, Container: old.Container, - StopGracePeriod: spec.StopGracePeriod, + StopGracePeriod: spec.Container.StopGracePeriod, }) } break @@ -354,7 +354,7 @@ func reconcileGlobalContainer( ContainerID: c.Container.ID, MachineID: machine.Id, MachineName: machine.Name, - StopGracePeriod: spec.StopGracePeriod, + StopGracePeriod: spec.Container.StopGracePeriod, }) } } @@ -369,7 +369,7 @@ func reconcileGlobalContainer( OldContainer: containerToReplace.Container, Order: order, SkipHealthMonitor: skipHealthCheck, - StopGracePeriod: spec.StopGracePeriod, + StopGracePeriod: spec.Container.StopGracePeriod, }) // Remove any other containers (there shouldn't be any in normal operation). @@ -381,7 +381,7 @@ func reconcileGlobalContainer( MachineID: c.MachineID, MachineName: machine.Name, Container: c.Container, - StopGracePeriod: spec.StopGracePeriod, + StopGracePeriod: spec.Container.StopGracePeriod, }) } } else { @@ -398,7 +398,7 @@ func reconcileGlobalContainer( MachineID: c.MachineID, MachineName: machine.Name, Container: c.Container, - StopGracePeriod: spec.StopGracePeriod, + StopGracePeriod: spec.Container.StopGracePeriod, }) } }