diff --git a/pkg/executor/executortype/container/deployment.go b/pkg/executor/executortype/container/deployment.go index 068c4485..b7304eba 100644 --- a/pkg/executor/executortype/container/deployment.go +++ b/pkg/executor/executortype/container/deployment.go @@ -172,6 +172,9 @@ func (cn *Container) getDeploymentSpec(ctx context.Context, fn *fv1.Function, ta } gracePeriodSeconds := int64(6 * 60) + if *fn.Spec.PodSpec.TerminationGracePeriodSeconds >= 0 { + gracePeriodSeconds = *fn.Spec.PodSpec.TerminationGracePeriodSeconds + } podAnnotations := make(map[string]string) diff --git a/pkg/fission-cli/cmd/function/command.go b/pkg/fission-cli/cmd/function/command.go index a2273db5..9758b291 100644 --- a/pkg/fission-cli/cmd/function/command.go +++ b/pkg/fission-cli/cmd/function/command.go @@ -167,6 +167,7 @@ func Commands() *cobra.Command { flag.FnCfgMap, flag.FnSecret, flag.FnExecutionTimeout, flag.FnIdleTimeout, + flag.FnTerminationGracePeriod, flag.Labels, flag.Annotation, // flag for newdeploy to use. diff --git a/pkg/fission-cli/cmd/function/run_container.go b/pkg/fission-cli/cmd/function/run_container.go index 41854e18..f96173b5 100644 --- a/pkg/fission-cli/cmd/function/run_container.go +++ b/pkg/fission-cli/cmd/function/run_container.go @@ -100,6 +100,11 @@ func (opts *RunContainerSubCommand) complete(input cli.Input) error { return err } + fnGracePeriod := input.Int64(flagkey.FnGracePeriod) + if fnGracePeriod < 0 { + console.Warn("grace period must be a non-negative integer, using default value (6 mins)") + } + var imageName string var port int var command, args string @@ -205,7 +210,8 @@ func (opts *RunContainerSubCommand) complete(input cli.Input) error { } opts.function.Spec.PodSpec = &apiv1.PodSpec{ - Containers: []apiv1.Container{*container}, + Containers: []apiv1.Container{*container}, + TerminationGracePeriodSeconds: &fnGracePeriod, } return nil diff --git a/pkg/fission-cli/flag/flag.go b/pkg/fission-cli/flag/flag.go index 773251fc..9c2131a8 100644 --- a/pkg/fission-cli/flag/flag.go +++ b/pkg/fission-cli/flag/flag.go @@ -125,6 +125,8 @@ var ( FnRequestsPerPod = Flag{Type: Int, Name: flagkey.FnRequestsPerPod, Aliases: []string{"rpp"}, Usage: "Maximum number of concurrent requests that can be served by a specialized pod", DefaultValue: 1} FnOnceOnly = Flag{Type: Bool, Name: flagkey.FnOnceOnly, Aliases: []string{"yolo"}, Usage: "Specifies if specialized pod will serve exactly one request in its lifetime"} FnSubPath = Flag{Type: String, Name: flagkey.FnSubPath, Usage: "Sub Path to check if function internally supports routing"} + // Termination Grace Period configurable at function creation/update only for container functions + FnTerminationGracePeriod = Flag{Type: Int64, Name: flagkey.FnGracePeriod, Usage: "Grace time (in seconds) for pod to perform connection draining before termination (default value will be used if negative value is given)", DefaultValue: 360} HtName = Flag{Type: String, Name: flagkey.HtName, Usage: "HTTP trigger name"} HtMethod = Flag{Type: StringSlice, Name: flagkey.HtMethod, Usage: "HTTP Methods: GET,POST,PUT,DELETE,HEAD. To mention single method: --method GET and for multiple methods --method GET --method POST. [DEPRECATED for 'fn create', use 'route create' instead]", DefaultValue: []string{http.MethodGet}} diff --git a/pkg/fission-cli/flag/key/key.go b/pkg/fission-cli/flag/key/key.go index 2c856f3b..c736364b 100644 --- a/pkg/fission-cli/flag/key/key.go +++ b/pkg/fission-cli/flag/key/key.go @@ -76,6 +76,7 @@ const ( FnRequestsPerPod = "requestsperpod" FnOnceOnly = "onceonly" FnSubPath = "subpath" + FnGracePeriod = "graceperiod" HtName = resourceName HtMethod = "method"