From 74408abb9fccbebbc97696a3ebb980ef8cb9bec8 Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Tue, 24 Feb 2026 13:50:48 +0300 Subject: [PATCH 01/10] add default http.shutdownDelay for VMAuth --- .../operator/factory/build/container.go | 29 +++++++++++++++++++ .../operator/factory/build/container_test.go | 24 +++++++++++++++ .../operator/factory/vmauth/vmauth.go | 1 + .../operator/factory/vmauth/vmauth_test.go | 2 ++ 4 files changed, 56 insertions(+) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index 18b65e0a7..39d32ea90 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -216,6 +216,35 @@ func AddExtraArgsOverrideDefaults(args []string, extraArgs map[string]string, da return args } +const ( + defaultReadinessPeriodSeconds int32 = 10 + defaultReadinessFailureThreshold int32 = 3 +) + +// AddHTTPShutdownDelayArg adds default http.shutdownDelay flag if user didn't override it in extraArgs. +// If readiness probe is provided, delay is derived from readiness probe timings. +func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, probes *vmv1beta1.EmbeddedProbes, dashes string) []string { + if _, ok := extraArgs["http.shutdownDelay"]; ok { + return args + } + + delaySeconds := defaultReadinessPeriodSeconds * defaultReadinessFailureThreshold + if probes != nil && probes.ReadinessProbe != nil { + periodSeconds := probes.ReadinessProbe.PeriodSeconds + if periodSeconds == 0 { + periodSeconds = defaultReadinessPeriodSeconds + } + failureThreshold := probes.ReadinessProbe.FailureThreshold + if failureThreshold == 0 { + failureThreshold = defaultReadinessFailureThreshold + } + delaySeconds = periodSeconds * failureThreshold + } + + args = append(args, fmt.Sprintf("%shttp.shutdownDelay=%ds", dashes, delaySeconds)) + return args +} + // formatContainerImage returns container image with registry prefix if needed. func formatContainerImage(registry string, containerImage string) string { if registry == "" { diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index e2e763d8d..420ece759 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -205,6 +205,30 @@ func Test_addExtraArgsOverrideDefaults(t *testing.T) { }) } +func TestAddHTTPShutdownDelayArg(t *testing.T) { + t.Run("adds default derived from built-in readiness defaults", func(t *testing.T) { + got := AddHTTPShutdownDelayArg(nil, nil, nil, "-") + assert.Equal(t, []string{"-http.shutdownDelay=30s"}, got) + }) + + t.Run("does not override user extraArgs", func(t *testing.T) { + extraArgs := map[string]string{"http.shutdownDelay": "5s"} + got := AddHTTPShutdownDelayArg(nil, extraArgs, nil, "-") + assert.Nil(t, got) + }) + + t.Run("derives value from custom readiness probe", func(t *testing.T) { + probes := &vmv1beta1.EmbeddedProbes{ + ReadinessProbe: &corev1.Probe{ + PeriodSeconds: 3, + FailureThreshold: 4, + }, + } + got := AddHTTPShutdownDelayArg(nil, nil, probes, "-") + assert.Equal(t, []string{"-http.shutdownDelay=12s"}, got) + }) +} + func TestFormatContainerImage(t *testing.T) { f := func(globalRepo, image, wantImage string) { t.Helper() diff --git a/internal/controller/operator/factory/vmauth/vmauth.go b/internal/controller/operator/factory/vmauth/vmauth.go index 9b6c1f894..a0cc96886 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -326,6 +326,7 @@ func makeSpecForVMAuth(cr *vmv1beta1.VMAuth) (*corev1.PodTemplateSpec, error) { return nil, fmt.Errorf("cannot apply patch for initContainers: %w", err) } + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes, "-") args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmauth/vmauth_test.go b/internal/controller/operator/factory/vmauth/vmauth_test.go index ad327154c..923b0096f 100644 --- a/internal/controller/operator/factory/vmauth/vmauth_test.go +++ b/internal/controller/operator/factory/vmauth/vmauth_test.go @@ -471,6 +471,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml + - -http.shutdownDelay=30s - -httpListenAddr=:8429 ports: - name: http @@ -582,6 +583,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml + - -http.shutdownDelay=30s - -httpListenAddr=:8429 ports: - name: http From 7504d8e2537abbabe03fb56ceee3d1efd6618df0 Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Tue, 24 Feb 2026 14:44:01 +0300 Subject: [PATCH 02/10] change default shutdownDelay to match build.Probe, added it to VMAgent, VMAlert, VMSingle --- internal/controller/operator/factory/build/container.go | 4 ++-- internal/controller/operator/factory/vmagent/vmagent.go | 1 + internal/controller/operator/factory/vmagent/vmagent_test.go | 5 +++++ internal/controller/operator/factory/vmalert/vmalert.go | 3 ++- internal/controller/operator/factory/vmalert/vmalert_test.go | 5 +++-- internal/controller/operator/factory/vmsingle/vmsingle.go | 2 +- 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index 39d32ea90..2fb5af25b 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -217,8 +217,8 @@ func AddExtraArgsOverrideDefaults(args []string, extraArgs map[string]string, da } const ( - defaultReadinessPeriodSeconds int32 = 10 - defaultReadinessFailureThreshold int32 = 3 + defaultReadinessPeriodSeconds int32 = 5 + defaultReadinessFailureThreshold int32 = 10 ) // AddHTTPShutdownDelayArg adds default http.shutdownDelay flag if user didn't override it in extraArgs. diff --git a/internal/controller/operator/factory/vmagent/vmagent.go b/internal/controller/operator/factory/vmagent/vmagent.go index ffa145038..6ab8ccbf3 100644 --- a/internal/controller/operator/factory/vmagent/vmagent.go +++ b/internal/controller/operator/factory/vmagent/vmagent.go @@ -656,6 +656,7 @@ func newPodSpec(cr *vmv1beta1.VMAgent, ac *build.AssetsCache) (*corev1.PodSpec, args = build.StreamAggrArgsTo(args, "streamAggr", streamAggrKeys, streamAggrConfigs...) args = build.AppendArgsForInsertPorts(args, cr.Spec.InsertPorts) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes, "-") args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmagent/vmagent_test.go b/internal/controller/operator/factory/vmagent/vmagent_test.go index d1b6e76cf..256ca6cc9 100644 --- a/internal/controller/operator/factory/vmagent/vmagent_test.go +++ b/internal/controller/operator/factory/vmagent/vmagent_test.go @@ -2106,6 +2106,7 @@ containers: - name: vmagent image: vm-repo:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:8425 - -remoteWrite.maxDiskUsagePerURL=1073741824 - -remoteWrite.tmpDataPath=/tmp/vmagent-remotewrite-data @@ -2207,6 +2208,7 @@ containers: - name: vmagent image: victoriametrics/vmagent:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:8429 - -promscrape.config=/etc/vmagent/config_out/vmagent.yaml - -remoteWrite.maxDiskUsagePerURL=1073741824 @@ -2338,6 +2340,7 @@ containers: - name: vmagent image: victoriametrics/vmagent:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:8425 - -remoteWrite.maxDiskUsagePerURL=10GB,10GB,1073741824 - -remoteWrite.tmpDataPath=/tmp/vmagent-remotewrite-data @@ -2424,6 +2427,7 @@ containers: - name: vmagent image: victoriametrics/vmagent:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:8425 - -remoteWrite.maxDiskUsagePerURL=10GB,20MB,10GB - -remoteWrite.tmpDataPath=/tmp/vmagent-remotewrite-data @@ -2517,6 +2521,7 @@ containers: - name: vmagent image: victoriametrics/vmagent:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:8425 - -remoteWrite.forceVMProto=false - -remoteWrite.maxDiskUsagePerURL=35GiB diff --git a/internal/controller/operator/factory/vmalert/vmalert.go b/internal/controller/operator/factory/vmalert/vmalert.go index e5bfdd375..848bbad1d 100644 --- a/internal/controller/operator/factory/vmalert/vmalert.go +++ b/internal/controller/operator/factory/vmalert/vmalert.go @@ -522,8 +522,9 @@ func buildArgs(cr *vmv1beta1.VMAlert, ruleConfigMapNames []string, ac *build.Ass } args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes, "-") args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") + sort.Strings(args) return args, nil } diff --git a/internal/controller/operator/factory/vmalert/vmalert_test.go b/internal/controller/operator/factory/vmalert/vmalert_test.go index d23c71f91..13e378e6b 100644 --- a/internal/controller/operator/factory/vmalert/vmalert_test.go +++ b/internal/controller/operator/factory/vmalert/vmalert_test.go @@ -682,7 +682,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, }, ruleConfigMapNames: []string{"first-rule-cm.yaml"}, - want: []string{"-datasource.url=http://vmsingle-url", "-httpListenAddr=:", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, + want: []string{"-datasource.url=http://vmsingle-url", "-http.shutdownDelay=50s", "-httpListenAddr=:", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, }) // with tls args @@ -712,7 +712,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, }, ruleConfigMapNames: []string{"first-rule-cm.yaml"}, - want: []string{"--datasource.headers=x-org-id:one^^x-org-tenant:5", "-datasource.tlsCAFile=/path/to/sa", "-datasource.tlsInsecureSkipVerify=true", "-datasource.tlsKeyFile=/path/to/key", "-datasource.url=http://vmsingle-url", "-httpListenAddr=:", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, + want: []string{"--datasource.headers=x-org-id:one^^x-org-tenant:5", "-datasource.tlsCAFile=/path/to/sa", "-datasource.tlsInsecureSkipVerify=true", "-datasource.tlsKeyFile=/path/to/key", "-datasource.url=http://vmsingle-url", "-http.shutdownDelay=50s", "-httpListenAddr=:", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, }) // with static and selector notifiers @@ -786,6 +786,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, want: []string{ "-datasource.url=http://some-vm-datasource", + "-http.shutdownDelay=50s", "-httpListenAddr=:", "-notifier.tlsCAFile=,/tmp/ca.cert,,,", "-notifier.tlsCertFile=,/tmp/cert.pem,,,", diff --git a/internal/controller/operator/factory/vmsingle/vmsingle.go b/internal/controller/operator/factory/vmsingle/vmsingle.go index 71e570c34..5a579bd4b 100644 --- a/internal/controller/operator/factory/vmsingle/vmsingle.go +++ b/internal/controller/operator/factory/vmsingle/vmsingle.go @@ -329,7 +329,7 @@ func newPodSpec(ctx context.Context, cr *vmv1beta1.VMSingle) (*corev1.PodTemplat volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes, "-") args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) vmsingleContainer := corev1.Container{ From 849455b718a33005db262f60e35c57a36c129d7e Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Tue, 24 Feb 2026 17:41:10 +0300 Subject: [PATCH 03/10] refactor AddHTTPShutdownArg, add shutdownDelay to other components --- .../operator/factory/build/container.go | 6 +- .../operator/factory/build/container_test.go | 8 +-- .../operator/factory/vlagent/vlagent.go | 1 + .../operator/factory/vlagent/vlagent_test.go | 65 +++++++++++++++++++ .../factory/vlcluster/vlcluster_test.go | 9 +-- .../operator/factory/vlcluster/vlinsert.go | 1 + .../operator/factory/vlcluster/vlselect.go | 1 + .../operator/factory/vlcluster/vlstorage.go | 1 + .../operator/factory/vlcluster/vmauth_lb.go | 1 + .../operator/factory/vlsingle/vlsingle.go | 1 + .../operator/factory/vmagent/vmagent.go | 2 +- .../operator/factory/vmalert/vmalert.go | 2 +- .../operator/factory/vmauth/vmauth.go | 2 +- .../operator/factory/vmauth/vmauth_test.go | 4 +- .../operator/factory/vmcluster/vmcluster.go | 4 ++ .../operator/factory/vmsingle/vmsingle.go | 2 +- .../factory/vtcluster/cluster_test.go | 8 +-- .../operator/factory/vtcluster/insert.go | 1 + .../operator/factory/vtcluster/select.go | 1 + .../operator/factory/vtcluster/storage.go | 1 + .../operator/factory/vtsingle/vtsingle.go | 2 + 21 files changed, 102 insertions(+), 21 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index 2fb5af25b..80034c4bc 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -221,9 +221,9 @@ const ( defaultReadinessFailureThreshold int32 = 10 ) -// AddHTTPShutdownDelayArg adds default http.shutdownDelay flag if user didn't override it in extraArgs. +// AddHTTPShutdownDelayArg adds default -http.shutdownDelay flag if user didn't override it in extraArgs. // If readiness probe is provided, delay is derived from readiness probe timings. -func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, probes *vmv1beta1.EmbeddedProbes, dashes string) []string { +func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, probes *vmv1beta1.EmbeddedProbes) []string { if _, ok := extraArgs["http.shutdownDelay"]; ok { return args } @@ -241,7 +241,7 @@ func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, probes delaySeconds = periodSeconds * failureThreshold } - args = append(args, fmt.Sprintf("%shttp.shutdownDelay=%ds", dashes, delaySeconds)) + args = append(args, fmt.Sprintf("-http.shutdownDelay=%ds", delaySeconds)) return args } diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index 420ece759..1d3cdba09 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -207,13 +207,13 @@ func Test_addExtraArgsOverrideDefaults(t *testing.T) { func TestAddHTTPShutdownDelayArg(t *testing.T) { t.Run("adds default derived from built-in readiness defaults", func(t *testing.T) { - got := AddHTTPShutdownDelayArg(nil, nil, nil, "-") - assert.Equal(t, []string{"-http.shutdownDelay=30s"}, got) + got := AddHTTPShutdownDelayArg(nil, nil, nil) + assert.Equal(t, []string{"-http.shutdownDelay=50s"}, got) }) t.Run("does not override user extraArgs", func(t *testing.T) { extraArgs := map[string]string{"http.shutdownDelay": "5s"} - got := AddHTTPShutdownDelayArg(nil, extraArgs, nil, "-") + got := AddHTTPShutdownDelayArg(nil, extraArgs, nil) assert.Nil(t, got) }) @@ -224,7 +224,7 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { FailureThreshold: 4, }, } - got := AddHTTPShutdownDelayArg(nil, nil, probes, "-") + got := AddHTTPShutdownDelayArg(nil, nil, probes) assert.Equal(t, []string{"-http.shutdownDelay=12s"}, got) }) } diff --git a/internal/controller/operator/factory/vlagent/vlagent.go b/internal/controller/operator/factory/vlagent/vlagent.go index 4fb025467..aa77d9a05 100644 --- a/internal/controller/operator/factory/vlagent/vlagent.go +++ b/internal/controller/operator/factory/vlagent/vlagent.go @@ -425,6 +425,7 @@ func newPodSpec(cr *vmv1.VLAgent) (*corev1.PodSpec, error) { agentVolumeMounts = append(agentVolumeMounts, cvm) } volumes, agentVolumeMounts = addRemoteWriteAssetsToVolumes(volumes, agentVolumeMounts, cr) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlagent/vlagent_test.go b/internal/controller/operator/factory/vlagent/vlagent_test.go index c8856f2c2..589663a96 100644 --- a/internal/controller/operator/factory/vlagent/vlagent_test.go +++ b/internal/controller/operator/factory/vlagent/vlagent_test.go @@ -775,6 +775,7 @@ containers: - name: vlagent image: vm-repo:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9425 - -tmpDataPath=/vlagent-data ports: @@ -839,6 +840,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9429 - -tmpDataPath=/vlagent-data ports: @@ -905,6 +907,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9425 - -remoteWrite.maxDiskUsagePerURL=10GB,10GB, - -remoteWrite.url=http://some-url/api/v1/write,http://some-url-2/api/v1/write,http://some-url-3/api/v1/write @@ -978,6 +981,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.47.0 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9425 - -kubernetesCollector - -kubernetesCollector.includePodLabels @@ -1072,6 +1076,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9425 - -remoteWrite.maxDiskUsagePerURL=10GB,20MB,10GB - -remoteWrite.url=http://some-url/api/v1/write,http://some-url-2/api/v1/write,http://some-url-3/api/v1/write @@ -1148,6 +1153,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v0.0.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9425 - -remoteWrite.maxDiskUsagePerURL=35GiB - -remoteWrite.url=http://some-url/api/v1/write,http://some-url-2/api/v1/write,http://some-url-3/api/v1/write @@ -1186,5 +1192,64 @@ containers: serviceaccountname: vlagent-agent `) + // test custom readiness probe affects both readiness and shutdownDelay + f(&vmv1.VLAgent{ + ObjectMeta: metav1.ObjectMeta{Name: "agent", Namespace: "default"}, + Spec: vmv1.VLAgentSpec{ + CommonDefaultableParams: vmv1beta1.CommonDefaultableParams{ + Image: vmv1beta1.Image{ + Tag: "v1.97.1", + }, + UseDefaultResources: ptr.To(false), + Port: "9429", + }, + EmbeddedProbes: &vmv1beta1.EmbeddedProbes{ + ReadinessProbe: &corev1.Probe{ + PeriodSeconds: 4, + FailureThreshold: 6, + }, + }, + }, + }, []runtime.Object{}, ` +containers: + - name: vlagent + image: victoriametrics/vlagent:v1.97.1 + args: + - -http.shutdownDelay=24s + - -httpListenAddr=:9429 + - -tmpDataPath=/vlagent-data + ports: + - name: http + containerport: 9429 + protocol: TCP + volumemounts: + - name: tmp-data + mountpath: /vlagent-data + livenessprobe: + probehandler: + httpget: + path: /health + port: + intval: 9429 + scheme: HTTP + timeoutseconds: 5 + periodseconds: 5 + successthreshold: 1 + failurethreshold: 10 + readinessprobe: + probehandler: + httpget: + path: /health + port: + intval: 9429 + scheme: HTTP + timeoutseconds: 5 + periodseconds: 4 + successthreshold: 1 + failurethreshold: 6 + terminationmessagepolicy: FallbackToLogsOnError + imagepullpolicy: IfNotPresent +serviceaccountname: vlagent-agent +`) } diff --git a/internal/controller/operator/factory/vlcluster/vlcluster_test.go b/internal/controller/operator/factory/vlcluster/vlcluster_test.go index 05fe96679..063c3e583 100644 --- a/internal/controller/operator/factory/vlcluster/vlcluster_test.go +++ b/internal/controller/operator/factory/vlcluster/vlcluster_test.go @@ -100,7 +100,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentInsert), Namespace: cr.Namespace}, &dep)) assert.Len(t, dep.Spec.Template.Spec.Containers, 1) cnt := dep.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-httpListenAddr=:9481", "-internalselect.disable=true", "-storageNode=vlstorage-base-0.vlstorage-base.default:9491,vlstorage-base-1.vlstorage-base.default:9491"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:9481", "-internalselect.disable=true", "-storageNode=vlstorage-base-0.vlstorage-base.default:9491,vlstorage-base-1.vlstorage-base.default:9491"}) assert.Nil(t, dep.Annotations) assert.Equal(t, dep.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentInsert)) @@ -108,7 +108,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentSelect), Namespace: cr.Namespace}, &dep)) assert.Len(t, dep.Spec.Template.Spec.Containers, 1) cnt = dep.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-httpListenAddr=:9471", "-internalinsert.disable=true", "-storageNode=vlstorage-base-0.vlstorage-base.default:9491,vlstorage-base-1.vlstorage-base.default:9491"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:9471", "-internalinsert.disable=true", "-storageNode=vlstorage-base-0.vlstorage-base.default:9491,vlstorage-base-1.vlstorage-base.default:9491"}) assert.Nil(t, dep.Annotations) assert.Equal(t, dep.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentSelect)) @@ -117,7 +117,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), Namespace: cr.Namespace}, &sts)) assert.Len(t, sts.Spec.Template.Spec.Containers, 1) cnt = sts.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-httpListenAddr=:9491", "-storageDataPath=/vlstorage-data"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:9491", "-storageDataPath=/vlstorage-data"}) assert.Nil(t, sts.Annotations) assert.Equal(t, sts.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentStorage)) }, @@ -147,7 +147,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), Namespace: cr.Namespace}, &sts)) assert.Len(t, sts.Spec.Template.Spec.Containers, 1) cnt := sts.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-futureRetention=2d", "-httpListenAddr=:9491", "-retention.maxDiskSpaceUsageBytes=5GB", "-retentionPeriod=1w", "-storageDataPath=/vlstorage-data"}) + assert.Equal(t, cnt.Args, []string{"-futureRetention=2d", "-http.shutdownDelay=50s", "-httpListenAddr=:9491", "-retention.maxDiskSpaceUsageBytes=5GB", "-retentionPeriod=1w", "-storageDataPath=/vlstorage-data"}) }, }) @@ -184,6 +184,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Len(t, d.Spec.Template.Spec.Containers, 1) cnt := d.Spec.Template.Spec.Containers[0] assert.Equal(t, cnt.Args, []string{ + "-http.shutdownDelay=50s", "-httpListenAddr=:9471", "-internalinsert.disable=true", "-storageNode=vlstorage-read-only-0.vlstorage-read-only.default:9491,localhost:10101", diff --git a/internal/controller/operator/factory/vlcluster/vlinsert.go b/internal/controller/operator/factory/vlcluster/vlinsert.go index b748bd2dc..79a2be8c8 100644 --- a/internal/controller/operator/factory/vlcluster/vlinsert.go +++ b/internal/controller/operator/factory/vlcluster/vlinsert.go @@ -206,6 +206,7 @@ func buildVLInsertPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLInsert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlcluster/vlselect.go b/internal/controller/operator/factory/vlcluster/vlselect.go index c3d3bf840..d169972ad 100644 --- a/internal/controller/operator/factory/vlcluster/vlselect.go +++ b/internal/controller/operator/factory/vlcluster/vlselect.go @@ -307,6 +307,7 @@ func buildVLSelectPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLSelect.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vlstorage.go b/internal/controller/operator/factory/vlcluster/vlstorage.go index 644b130fb..bb6bf9309 100644 --- a/internal/controller/operator/factory/vlcluster/vlstorage.go +++ b/internal/controller/operator/factory/vlcluster/vlstorage.go @@ -309,6 +309,7 @@ func buildVLStoragePodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) }) } + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vmauth_lb.go b/internal/controller/operator/factory/vlcluster/vmauth_lb.go index ee3833c46..8722f596c 100644 --- a/internal/controller/operator/factory/vlcluster/vmauth_lb.go +++ b/internal/controller/operator/factory/vlcluster/vmauth_lb.go @@ -161,6 +161,7 @@ func buildVMauthLBDeployment(cr *vmv1.VLCluster) (*appsv1.Deployment, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vlsingle/vlsingle.go b/internal/controller/operator/factory/vlsingle/vlsingle.go index 1b644dd35..94b5025ae 100644 --- a/internal/controller/operator/factory/vlsingle/vlsingle.go +++ b/internal/controller/operator/factory/vlsingle/vlsingle.go @@ -235,6 +235,7 @@ func makePodSpec(r *vmv1.VLSingle) (*corev1.PodTemplateSpec, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, r.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, r.Spec.License, vmv1beta1.SecretsDir) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vlsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vmagent/vmagent.go b/internal/controller/operator/factory/vmagent/vmagent.go index 6ab8ccbf3..a7c4c9236 100644 --- a/internal/controller/operator/factory/vmagent/vmagent.go +++ b/internal/controller/operator/factory/vmagent/vmagent.go @@ -656,7 +656,7 @@ func newPodSpec(cr *vmv1beta1.VMAgent, ac *build.AssetsCache) (*corev1.PodSpec, args = build.StreamAggrArgsTo(args, "streamAggr", streamAggrKeys, streamAggrConfigs...) args = build.AppendArgsForInsertPorts(args, cr.Spec.InsertPorts) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes, "-") + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmalert/vmalert.go b/internal/controller/operator/factory/vmalert/vmalert.go index 848bbad1d..4ee40ac41 100644 --- a/internal/controller/operator/factory/vmalert/vmalert.go +++ b/internal/controller/operator/factory/vmalert/vmalert.go @@ -522,7 +522,7 @@ func buildArgs(cr *vmv1beta1.VMAlert, ruleConfigMapNames []string, ac *build.Ass } args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes, "-") + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmauth/vmauth.go b/internal/controller/operator/factory/vmauth/vmauth.go index a0cc96886..58df5148a 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -326,7 +326,7 @@ func makeSpecForVMAuth(cr *vmv1beta1.VMAuth) (*corev1.PodTemplateSpec, error) { return nil, fmt.Errorf("cannot apply patch for initContainers: %w", err) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes, "-") + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmauth/vmauth_test.go b/internal/controller/operator/factory/vmauth/vmauth_test.go index 923b0096f..a1ff3e2ed 100644 --- a/internal/controller/operator/factory/vmauth/vmauth_test.go +++ b/internal/controller/operator/factory/vmauth/vmauth_test.go @@ -471,7 +471,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml - - -http.shutdownDelay=30s + - -http.shutdownDelay=50s - -httpListenAddr=:8429 ports: - name: http @@ -583,7 +583,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml - - -http.shutdownDelay=30s + - -http.shutdownDelay=50s - -httpListenAddr=:8429 ports: - name: http diff --git a/internal/controller/operator/factory/vmcluster/vmcluster.go b/internal/controller/operator/factory/vmcluster/vmcluster.go index cc38202f5..e1cde1c9d 100644 --- a/internal/controller/operator/factory/vmcluster/vmcluster.go +++ b/internal/controller/operator/factory/vmcluster/vmcluster.go @@ -657,6 +657,7 @@ func makePodSpecForVMSelect(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMSelect.ExtraArgs, "-") sort.Strings(args) vmselectContainer := corev1.Container{ @@ -861,6 +862,7 @@ func makePodSpecForVMInsert(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMInsert.ExtraArgs, "-") sort.Strings(args) @@ -1081,6 +1083,7 @@ func makePodSpecForVMStorage(ctx context.Context, cr *vmv1beta1.VMCluster) (*cor volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ @@ -1508,6 +1511,7 @@ func buildVMAuthLBDeployment(cr *vmv1beta1.VMCluster) (*appsv1.Deployment, error volumes, vmounts = build.LicenseVolumeTo(volumes, vmounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vmsingle/vmsingle.go b/internal/controller/operator/factory/vmsingle/vmsingle.go index 5a579bd4b..af9809630 100644 --- a/internal/controller/operator/factory/vmsingle/vmsingle.go +++ b/internal/controller/operator/factory/vmsingle/vmsingle.go @@ -329,7 +329,7 @@ func newPodSpec(ctx context.Context, cr *vmv1beta1.VMSingle) (*corev1.PodTemplat volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes, "-") + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) vmsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/cluster_test.go b/internal/controller/operator/factory/vtcluster/cluster_test.go index b295f5fb0..c8cb94db7 100644 --- a/internal/controller/operator/factory/vtcluster/cluster_test.go +++ b/internal/controller/operator/factory/vtcluster/cluster_test.go @@ -100,7 +100,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentInsert), Namespace: cr.Namespace}, &dep)) assert.Len(t, dep.Spec.Template.Spec.Containers, 1) cnt := dep.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-httpListenAddr=:10481", "-internalselect.disable=true", "-storageNode=vtstorage-base-0.vtstorage-base.default:10491,vtstorage-base-1.vtstorage-base.default:10491"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:10481", "-internalselect.disable=true", "-storageNode=vtstorage-base-0.vtstorage-base.default:10491,vtstorage-base-1.vtstorage-base.default:10491"}) assert.Nil(t, dep.Annotations) assert.Equal(t, dep.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentInsert)) @@ -108,7 +108,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentSelect), Namespace: cr.Namespace}, &dep)) assert.Len(t, dep.Spec.Template.Spec.Containers, 1) cnt = dep.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-httpListenAddr=:10471", "-internalinsert.disable=true", "-storageNode=vtstorage-base-0.vtstorage-base.default:10491,vtstorage-base-1.vtstorage-base.default:10491"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:10471", "-internalinsert.disable=true", "-storageNode=vtstorage-base-0.vtstorage-base.default:10491,vtstorage-base-1.vtstorage-base.default:10491"}) assert.Nil(t, dep.Annotations) assert.Equal(t, dep.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentSelect)) @@ -117,7 +117,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), Namespace: cr.Namespace}, &sts)) assert.Len(t, sts.Spec.Template.Spec.Containers, 1) cnt = sts.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-httpListenAddr=:10491", "-storageDataPath=/vtstorage-data"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:10491", "-storageDataPath=/vtstorage-data"}) assert.Nil(t, sts.Annotations) assert.Equal(t, sts.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentStorage)) }, @@ -147,7 +147,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), Namespace: cr.Namespace}, &sts)) assert.Len(t, sts.Spec.Template.Spec.Containers, 1) cnt := sts.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-futureRetention=2d", "-httpListenAddr=:10491", "-retention.maxDiskSpaceUsageBytes=5GB", "-retentionPeriod=1w", "-storageDataPath=/vtstorage-data"}) + assert.Equal(t, cnt.Args, []string{"-futureRetention=2d", "-http.shutdownDelay=50s", "-httpListenAddr=:10491", "-retention.maxDiskSpaceUsageBytes=5GB", "-retentionPeriod=1w", "-storageDataPath=/vtstorage-data"}) }, }) diff --git a/internal/controller/operator/factory/vtcluster/insert.go b/internal/controller/operator/factory/vtcluster/insert.go index d99928ba9..b81fe3cee 100644 --- a/internal/controller/operator/factory/vtcluster/insert.go +++ b/internal/controller/operator/factory/vtcluster/insert.go @@ -196,6 +196,7 @@ func buildVTInsertPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Insert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vtcluster/select.go b/internal/controller/operator/factory/vtcluster/select.go index a6fd1b175..a8bc485a8 100644 --- a/internal/controller/operator/factory/vtcluster/select.go +++ b/internal/controller/operator/factory/vtcluster/select.go @@ -303,6 +303,7 @@ func buildVTSelectPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Select.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/storage.go b/internal/controller/operator/factory/vtcluster/storage.go index 213e97dbe..ba05d512b 100644 --- a/internal/controller/operator/factory/vtcluster/storage.go +++ b/internal/controller/operator/factory/vtcluster/storage.go @@ -303,6 +303,7 @@ func buildVTStoragePodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) }) } + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Storage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtsingle/vtsingle.go b/internal/controller/operator/factory/vtsingle/vtsingle.go index 7c9d8e2d7..70189055d 100644 --- a/internal/controller/operator/factory/vtsingle/vtsingle.go +++ b/internal/controller/operator/factory/vtsingle/vtsingle.go @@ -225,6 +225,8 @@ func makePodSpec(r *vmv1.VTSingle) (*corev1.PodTemplateSpec, error) { MountPath: path.Join(vmv1beta1.ConfigMapsDir, c), }) } + + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.EmbeddedProbes) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vtsingleContainer := corev1.Container{ From 2d652dfb4559899278e2d0fc5f8430ce9c73230b Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Tue, 24 Feb 2026 18:07:29 +0300 Subject: [PATCH 04/10] refactor test --- .../operator/factory/build/container_test.go | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index 1d3cdba09..6dfc1d987 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -206,26 +206,38 @@ func Test_addExtraArgsOverrideDefaults(t *testing.T) { } func TestAddHTTPShutdownDelayArg(t *testing.T) { - t.Run("adds default derived from built-in readiness defaults", func(t *testing.T) { - got := AddHTTPShutdownDelayArg(nil, nil, nil) - assert.Equal(t, []string{"-http.shutdownDelay=50s"}, got) + type opts struct { + extraArgs map[string]string + probes *vmv1beta1.EmbeddedProbes + wantArgs []string + } + f := func(opts opts) { + t.Helper() + assert.Equal( + t, + AddHTTPShutdownDelayArg(nil, opts.extraArgs, opts.probes), + opts.wantArgs, + ) + } + f(opts{ + extraArgs: nil, + probes: nil, + wantArgs: []string{"-http.shutdownDelay=50s"}, }) - - t.Run("does not override user extraArgs", func(t *testing.T) { - extraArgs := map[string]string{"http.shutdownDelay": "5s"} - got := AddHTTPShutdownDelayArg(nil, extraArgs, nil) - assert.Nil(t, got) + f(opts{ + extraArgs: map[string]string{"http.shutdownDelay": "5s"}, + probes: nil, + wantArgs: nil, }) - - t.Run("derives value from custom readiness probe", func(t *testing.T) { - probes := &vmv1beta1.EmbeddedProbes{ + f(opts{ + extraArgs: nil, + probes: &vmv1beta1.EmbeddedProbes{ ReadinessProbe: &corev1.Probe{ PeriodSeconds: 3, FailureThreshold: 4, }, - } - got := AddHTTPShutdownDelayArg(nil, nil, probes) - assert.Equal(t, []string{"-http.shutdownDelay=12s"}, got) + }, + wantArgs: []string{"-http.shutdownDelay=12s"}, }) } From 9b806b524fe58a769fa2a8a7df909d8fa2bb2cdf Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:24:01 +0300 Subject: [PATCH 05/10] shutdownDelay now rely on terminationGracePeriod - change terminationGracePeriodSeconds default to 30 seconds. - refactor tests and add test for custom terminationGracePeriodSeconds - change default shutdownDelay to 30 seconds. --- .../operator/factory/build/container.go | 24 +++--- .../operator/factory/build/container_test.go | 43 +++++----- .../operator/factory/build/daemonset.go | 4 +- .../operator/factory/build/defaults.go | 2 +- .../operator/factory/build/deployment.go | 4 +- .../operator/factory/build/statefulset.go | 4 +- .../operator/factory/vlagent/vlagent.go | 2 +- .../operator/factory/vlagent/vlagent_test.go | 79 +++++++++++++++---- .../factory/vlcluster/vlcluster_test.go | 10 +-- .../operator/factory/vlcluster/vlinsert.go | 2 +- .../operator/factory/vlcluster/vlselect.go | 2 +- .../operator/factory/vlcluster/vlstorage.go | 2 +- .../operator/factory/vlcluster/vmauth_lb.go | 2 +- .../operator/factory/vlsingle/vlsingle.go | 2 +- .../operator/factory/vmagent/vmagent.go | 2 +- .../operator/factory/vmagent/vmagent_test.go | 10 +-- .../operator/factory/vmalert/vmalert.go | 2 +- .../operator/factory/vmalert/vmalert_test.go | 6 +- .../operator/factory/vmauth/vmauth.go | 2 +- .../operator/factory/vmauth/vmauth_test.go | 4 +- .../operator/factory/vmcluster/vmcluster.go | 8 +- .../operator/factory/vmsingle/vmsingle.go | 2 +- .../factory/vtcluster/cluster_test.go | 8 +- .../operator/factory/vtcluster/insert.go | 2 +- .../operator/factory/vtcluster/select.go | 2 +- .../operator/factory/vtcluster/storage.go | 2 +- .../operator/factory/vtsingle/vtsingle.go | 2 +- 27 files changed, 145 insertions(+), 89 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index 80034c4bc..29042921a 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -217,28 +217,22 @@ func AddExtraArgsOverrideDefaults(args []string, extraArgs map[string]string, da } const ( - defaultReadinessPeriodSeconds int32 = 5 - defaultReadinessFailureThreshold int32 = 10 + // DefaultTerminationGracePeriodSeconds is the default termination grace period for all components + DefaultTerminationGracePeriodSeconds int64 = 30 ) // AddHTTPShutdownDelayArg adds default -http.shutdownDelay flag if user didn't override it in extraArgs. -// If readiness probe is provided, delay is derived from readiness probe timings. -func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, probes *vmv1beta1.EmbeddedProbes) []string { +// The delay is derived from terminationGracePeriodSeconds. +func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, terminationGracePeriodSeconds *int64) []string { if _, ok := extraArgs["http.shutdownDelay"]; ok { return args } - delaySeconds := defaultReadinessPeriodSeconds * defaultReadinessFailureThreshold - if probes != nil && probes.ReadinessProbe != nil { - periodSeconds := probes.ReadinessProbe.PeriodSeconds - if periodSeconds == 0 { - periodSeconds = defaultReadinessPeriodSeconds - } - failureThreshold := probes.ReadinessProbe.FailureThreshold - if failureThreshold == 0 { - failureThreshold = defaultReadinessFailureThreshold - } - delaySeconds = periodSeconds * failureThreshold + var delaySeconds int64 + if terminationGracePeriodSeconds != nil { + delaySeconds = *terminationGracePeriodSeconds + } else { + delaySeconds = DefaultTerminationGracePeriodSeconds } args = append(args, fmt.Sprintf("-http.shutdownDelay=%ds", delaySeconds)) diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index 6dfc1d987..027bef4de 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -9,6 +9,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/utils/ptr" vmv1 "github.com/VictoriaMetrics/operator/api/operator/v1" vmv1beta1 "github.com/VictoriaMetrics/operator/api/operator/v1beta1" @@ -207,37 +208,43 @@ func Test_addExtraArgsOverrideDefaults(t *testing.T) { func TestAddHTTPShutdownDelayArg(t *testing.T) { type opts struct { - extraArgs map[string]string - probes *vmv1beta1.EmbeddedProbes - wantArgs []string + extraArgs map[string]string + terminationGracePeriodSeconds *int64 + wantArgs []string } f := func(opts opts) { t.Helper() assert.Equal( t, - AddHTTPShutdownDelayArg(nil, opts.extraArgs, opts.probes), + AddHTTPShutdownDelayArg(nil, opts.extraArgs, opts.terminationGracePeriodSeconds), opts.wantArgs, ) } f(opts{ - extraArgs: nil, - probes: nil, - wantArgs: []string{"-http.shutdownDelay=50s"}, + extraArgs: nil, + terminationGracePeriodSeconds: nil, + wantArgs: []string{"-http.shutdownDelay=30s"}, }) + //if extraArg already exists, no more args should be added, it will be added later in the process of adding extra args f(opts{ - extraArgs: map[string]string{"http.shutdownDelay": "5s"}, - probes: nil, - wantArgs: nil, + extraArgs: map[string]string{"http.shutdownDelay": "5s"}, + terminationGracePeriodSeconds: nil, + wantArgs: nil, }) f(opts{ - extraArgs: nil, - probes: &vmv1beta1.EmbeddedProbes{ - ReadinessProbe: &corev1.Probe{ - PeriodSeconds: 3, - FailureThreshold: 4, - }, - }, - wantArgs: []string{"-http.shutdownDelay=12s"}, + extraArgs: nil, + terminationGracePeriodSeconds: ptr.To[int64](60), + wantArgs: []string{"-http.shutdownDelay=60s"}, + }) + f(opts{ + extraArgs: nil, + terminationGracePeriodSeconds: ptr.To[int64](120), + wantArgs: []string{"-http.shutdownDelay=120s"}, + }) + f(opts{ + extraArgs: map[string]string{"http.shutdownDelay": "20s"}, + terminationGracePeriodSeconds: ptr.To[int64](120), + wantArgs: nil, }) } diff --git a/internal/controller/operator/factory/build/daemonset.go b/internal/controller/operator/factory/build/daemonset.go index c82f22dd0..e7f45894f 100644 --- a/internal/controller/operator/factory/build/daemonset.go +++ b/internal/controller/operator/factory/build/daemonset.go @@ -23,10 +23,12 @@ func DaemonSetAddCommonParams(dst *appsv1.DaemonSet, useStrictSecurity bool, par dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsWithRootToPod(params.SecurityContext, useStrictSecurity) + if params.TerminationGracePeriodSeconds == nil { + params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) + } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets - dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.ReadinessGates = params.ReadinessGates dst.Spec.MinReadySeconds = params.MinReadySeconds dst.Spec.RevisionHistoryLimit = params.RevisionHistoryLimitCount diff --git a/internal/controller/operator/factory/build/defaults.go b/internal/controller/operator/factory/build/defaults.go index d6075dd6a..98ced86c4 100644 --- a/internal/controller/operator/factory/build/defaults.go +++ b/internal/controller/operator/factory/build/defaults.go @@ -347,7 +347,7 @@ const ( vmStorageDefaultDBPath = "vmstorage-data" ) -var defaultTerminationGracePeriod = int64(30) +var defaultTerminationGracePeriod = DefaultTerminationGracePeriodSeconds func addVMClusterSpecDefaults(spec *vmv1beta1.VMClusterSpec) { c := getCfg() diff --git a/internal/controller/operator/factory/build/deployment.go b/internal/controller/operator/factory/build/deployment.go index 215e10fd1..a95d89a94 100644 --- a/internal/controller/operator/factory/build/deployment.go +++ b/internal/controller/operator/factory/build/deployment.go @@ -23,10 +23,12 @@ func DeploymentAddCommonParams(dst *appsv1.Deployment, useStrictSecurity bool, p dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsToPod(params.SecurityContext, useStrictSecurity) + if params.TerminationGracePeriodSeconds == nil { + params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) + } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets - dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.ReadinessGates = params.ReadinessGates dst.Spec.MinReadySeconds = params.MinReadySeconds dst.Spec.Replicas = params.ReplicaCount diff --git a/internal/controller/operator/factory/build/statefulset.go b/internal/controller/operator/factory/build/statefulset.go index 172fa55f7..dd7c03e54 100644 --- a/internal/controller/operator/factory/build/statefulset.go +++ b/internal/controller/operator/factory/build/statefulset.go @@ -23,10 +23,12 @@ func StatefulSetAddCommonParams(dst *appsv1.StatefulSet, useStrictSecurity bool, dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsToPod(params.SecurityContext, useStrictSecurity) + if params.TerminationGracePeriodSeconds == nil { + params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) + } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets - dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.ReadinessGates = params.ReadinessGates dst.Spec.MinReadySeconds = params.MinReadySeconds dst.Spec.Replicas = params.ReplicaCount diff --git a/internal/controller/operator/factory/vlagent/vlagent.go b/internal/controller/operator/factory/vlagent/vlagent.go index aa77d9a05..ae269fdec 100644 --- a/internal/controller/operator/factory/vlagent/vlagent.go +++ b/internal/controller/operator/factory/vlagent/vlagent.go @@ -425,7 +425,7 @@ func newPodSpec(cr *vmv1.VLAgent) (*corev1.PodSpec, error) { agentVolumeMounts = append(agentVolumeMounts, cvm) } volumes, agentVolumeMounts = addRemoteWriteAssetsToVolumes(volumes, agentVolumeMounts, cr) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlagent/vlagent_test.go b/internal/controller/operator/factory/vlagent/vlagent_test.go index 589663a96..f72bd8cdf 100644 --- a/internal/controller/operator/factory/vlagent/vlagent_test.go +++ b/internal/controller/operator/factory/vlagent/vlagent_test.go @@ -294,6 +294,58 @@ func TestCreateOrUpdate(t *testing.T) { }, }, }) + + // test custom terminationGracePeriodSeconds is propagated to pod spec and shutdownDelay + f(opts{ + cr: &vmv1.VLAgent{ + ObjectMeta: metav1.ObjectMeta{ + Name: "example-agent-grace", + Namespace: "default", + }, + Spec: vmv1.VLAgentSpec{ + RemoteWrite: []vmv1.VLAgentRemoteWriteSpec{ + {URL: "http://remote-write"}, + }, + CommonApplicationDeploymentParams: vmv1beta1.CommonApplicationDeploymentParams{ + ReplicaCount: ptr.To(int32(1)), + TerminationGracePeriodSeconds: ptr.To[int64](60), + }, + }, + }, + validate: func(got *appsv1.StatefulSet) { + // terminationGracePeriodSeconds should be set on the pod spec + assert.NotNil(t, got.Spec.Template.Spec.TerminationGracePeriodSeconds) + assert.Equal(t, int64(60), *got.Spec.Template.Spec.TerminationGracePeriodSeconds) + // http.shutdownDelay should inherit from terminationGracePeriodSeconds + cnt := got.Spec.Template.Spec.Containers[0] + assert.Contains(t, cnt.Args, "-http.shutdownDelay=60s") + }, + }) + + // test default terminationGracePeriodSeconds when not set + f(opts{ + cr: &vmv1.VLAgent{ + ObjectMeta: metav1.ObjectMeta{ + Name: "example-agent-default-grace", + Namespace: "default", + }, + Spec: vmv1.VLAgentSpec{ + RemoteWrite: []vmv1.VLAgentRemoteWriteSpec{ + {URL: "http://remote-write"}, + }, + CommonApplicationDeploymentParams: vmv1beta1.CommonApplicationDeploymentParams{ + ReplicaCount: ptr.To(int32(1)), + }, + }, + }, + validate: func(got *appsv1.StatefulSet) { + // should get default 30s + assert.NotNil(t, got.Spec.Template.Spec.TerminationGracePeriodSeconds) + assert.Equal(t, int64(30), *got.Spec.Template.Spec.TerminationGracePeriodSeconds) + cnt := got.Spec.Template.Spec.Containers[0] + assert.Contains(t, cnt.Args, "-http.shutdownDelay=30s") + }, + }) } func TestBuildRemoteWriteArgs(t *testing.T) { @@ -775,7 +827,7 @@ containers: - name: vlagent image: vm-repo:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9425 - -tmpDataPath=/vlagent-data ports: @@ -840,7 +892,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9429 - -tmpDataPath=/vlagent-data ports: @@ -907,7 +959,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9425 - -remoteWrite.maxDiskUsagePerURL=10GB,10GB, - -remoteWrite.url=http://some-url/api/v1/write,http://some-url-2/api/v1/write,http://some-url-3/api/v1/write @@ -981,7 +1033,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.47.0 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9425 - -kubernetesCollector - -kubernetesCollector.includePodLabels @@ -1076,7 +1128,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9425 - -remoteWrite.maxDiskUsagePerURL=10GB,20MB,10GB - -remoteWrite.url=http://some-url/api/v1/write,http://some-url-2/api/v1/write,http://some-url-3/api/v1/write @@ -1153,7 +1205,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v0.0.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9425 - -remoteWrite.maxDiskUsagePerURL=35GiB - -remoteWrite.url=http://some-url/api/v1/write,http://some-url-2/api/v1/write,http://some-url-3/api/v1/write @@ -1192,7 +1244,7 @@ containers: serviceaccountname: vlagent-agent `) - // test custom readiness probe affects both readiness and shutdownDelay + // test custom terminationGrace probe affects both readiness and shutdownDelay f(&vmv1.VLAgent{ ObjectMeta: metav1.ObjectMeta{Name: "agent", Namespace: "default"}, Spec: vmv1.VLAgentSpec{ @@ -1203,11 +1255,8 @@ serviceaccountname: vlagent-agent UseDefaultResources: ptr.To(false), Port: "9429", }, - EmbeddedProbes: &vmv1beta1.EmbeddedProbes{ - ReadinessProbe: &corev1.Probe{ - PeriodSeconds: 4, - FailureThreshold: 6, - }, + CommonApplicationDeploymentParams: vmv1beta1.CommonApplicationDeploymentParams{ + TerminationGracePeriodSeconds: ptr.To[int64](40), }, }, }, []runtime.Object{}, ` @@ -1215,7 +1264,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: - - -http.shutdownDelay=24s + - -http.shutdownDelay=40s - -httpListenAddr=:9429 - -tmpDataPath=/vlagent-data ports: @@ -1244,9 +1293,9 @@ containers: intval: 9429 scheme: HTTP timeoutseconds: 5 - periodseconds: 4 + periodseconds: 5 successthreshold: 1 - failurethreshold: 6 + failurethreshold: 10 terminationmessagepolicy: FallbackToLogsOnError imagepullpolicy: IfNotPresent serviceaccountname: vlagent-agent diff --git a/internal/controller/operator/factory/vlcluster/vlcluster_test.go b/internal/controller/operator/factory/vlcluster/vlcluster_test.go index 063c3e583..a1f5bfe47 100644 --- a/internal/controller/operator/factory/vlcluster/vlcluster_test.go +++ b/internal/controller/operator/factory/vlcluster/vlcluster_test.go @@ -100,7 +100,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentInsert), Namespace: cr.Namespace}, &dep)) assert.Len(t, dep.Spec.Template.Spec.Containers, 1) cnt := dep.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:9481", "-internalselect.disable=true", "-storageNode=vlstorage-base-0.vlstorage-base.default:9491,vlstorage-base-1.vlstorage-base.default:9491"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=30s", "-httpListenAddr=:9481", "-internalselect.disable=true", "-storageNode=vlstorage-base-0.vlstorage-base.default:9491,vlstorage-base-1.vlstorage-base.default:9491"}) assert.Nil(t, dep.Annotations) assert.Equal(t, dep.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentInsert)) @@ -108,7 +108,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentSelect), Namespace: cr.Namespace}, &dep)) assert.Len(t, dep.Spec.Template.Spec.Containers, 1) cnt = dep.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:9471", "-internalinsert.disable=true", "-storageNode=vlstorage-base-0.vlstorage-base.default:9491,vlstorage-base-1.vlstorage-base.default:9491"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=30s", "-httpListenAddr=:9471", "-internalinsert.disable=true", "-storageNode=vlstorage-base-0.vlstorage-base.default:9491,vlstorage-base-1.vlstorage-base.default:9491"}) assert.Nil(t, dep.Annotations) assert.Equal(t, dep.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentSelect)) @@ -117,7 +117,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), Namespace: cr.Namespace}, &sts)) assert.Len(t, sts.Spec.Template.Spec.Containers, 1) cnt = sts.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:9491", "-storageDataPath=/vlstorage-data"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=30s", "-httpListenAddr=:9491", "-storageDataPath=/vlstorage-data"}) assert.Nil(t, sts.Annotations) assert.Equal(t, sts.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentStorage)) }, @@ -147,7 +147,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), Namespace: cr.Namespace}, &sts)) assert.Len(t, sts.Spec.Template.Spec.Containers, 1) cnt := sts.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-futureRetention=2d", "-http.shutdownDelay=50s", "-httpListenAddr=:9491", "-retention.maxDiskSpaceUsageBytes=5GB", "-retentionPeriod=1w", "-storageDataPath=/vlstorage-data"}) + assert.Equal(t, cnt.Args, []string{"-futureRetention=2d", "-http.shutdownDelay=30s", "-httpListenAddr=:9491", "-retention.maxDiskSpaceUsageBytes=5GB", "-retentionPeriod=1w", "-storageDataPath=/vlstorage-data"}) }, }) @@ -184,7 +184,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Len(t, d.Spec.Template.Spec.Containers, 1) cnt := d.Spec.Template.Spec.Containers[0] assert.Equal(t, cnt.Args, []string{ - "-http.shutdownDelay=50s", + "-http.shutdownDelay=30s", "-httpListenAddr=:9471", "-internalinsert.disable=true", "-storageNode=vlstorage-read-only-0.vlstorage-read-only.default:9491,localhost:10101", diff --git a/internal/controller/operator/factory/vlcluster/vlinsert.go b/internal/controller/operator/factory/vlcluster/vlinsert.go index 79a2be8c8..568b452f4 100644 --- a/internal/controller/operator/factory/vlcluster/vlinsert.go +++ b/internal/controller/operator/factory/vlcluster/vlinsert.go @@ -206,7 +206,7 @@ func buildVLInsertPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLInsert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlcluster/vlselect.go b/internal/controller/operator/factory/vlcluster/vlselect.go index d169972ad..65560f54a 100644 --- a/internal/controller/operator/factory/vlcluster/vlselect.go +++ b/internal/controller/operator/factory/vlcluster/vlselect.go @@ -307,7 +307,7 @@ func buildVLSelectPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLSelect.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vlstorage.go b/internal/controller/operator/factory/vlcluster/vlstorage.go index bb6bf9309..02a59f1f8 100644 --- a/internal/controller/operator/factory/vlcluster/vlstorage.go +++ b/internal/controller/operator/factory/vlcluster/vlstorage.go @@ -309,7 +309,7 @@ func buildVLStoragePodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vmauth_lb.go b/internal/controller/operator/factory/vlcluster/vmauth_lb.go index 8722f596c..4ff7ca676 100644 --- a/internal/controller/operator/factory/vlcluster/vmauth_lb.go +++ b/internal/controller/operator/factory/vlcluster/vmauth_lb.go @@ -161,7 +161,7 @@ func buildVMauthLBDeployment(cr *vmv1.VLCluster) (*appsv1.Deployment, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vlsingle/vlsingle.go b/internal/controller/operator/factory/vlsingle/vlsingle.go index 94b5025ae..497778c14 100644 --- a/internal/controller/operator/factory/vlsingle/vlsingle.go +++ b/internal/controller/operator/factory/vlsingle/vlsingle.go @@ -235,7 +235,7 @@ func makePodSpec(r *vmv1.VLSingle) (*corev1.PodTemplateSpec, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, r.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, r.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vlsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vmagent/vmagent.go b/internal/controller/operator/factory/vmagent/vmagent.go index a7c4c9236..6a6d9c1ac 100644 --- a/internal/controller/operator/factory/vmagent/vmagent.go +++ b/internal/controller/operator/factory/vmagent/vmagent.go @@ -656,7 +656,7 @@ func newPodSpec(cr *vmv1beta1.VMAgent, ac *build.AssetsCache) (*corev1.PodSpec, args = build.StreamAggrArgsTo(args, "streamAggr", streamAggrKeys, streamAggrConfigs...) args = build.AppendArgsForInsertPorts(args, cr.Spec.InsertPorts) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmagent/vmagent_test.go b/internal/controller/operator/factory/vmagent/vmagent_test.go index 256ca6cc9..a52ac7807 100644 --- a/internal/controller/operator/factory/vmagent/vmagent_test.go +++ b/internal/controller/operator/factory/vmagent/vmagent_test.go @@ -2106,7 +2106,7 @@ containers: - name: vmagent image: vm-repo:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8425 - -remoteWrite.maxDiskUsagePerURL=1073741824 - -remoteWrite.tmpDataPath=/tmp/vmagent-remotewrite-data @@ -2208,7 +2208,7 @@ containers: - name: vmagent image: victoriametrics/vmagent:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8429 - -promscrape.config=/etc/vmagent/config_out/vmagent.yaml - -remoteWrite.maxDiskUsagePerURL=1073741824 @@ -2340,7 +2340,7 @@ containers: - name: vmagent image: victoriametrics/vmagent:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8425 - -remoteWrite.maxDiskUsagePerURL=10GB,10GB,1073741824 - -remoteWrite.tmpDataPath=/tmp/vmagent-remotewrite-data @@ -2427,7 +2427,7 @@ containers: - name: vmagent image: victoriametrics/vmagent:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8425 - -remoteWrite.maxDiskUsagePerURL=10GB,20MB,10GB - -remoteWrite.tmpDataPath=/tmp/vmagent-remotewrite-data @@ -2521,7 +2521,7 @@ containers: - name: vmagent image: victoriametrics/vmagent:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8425 - -remoteWrite.forceVMProto=false - -remoteWrite.maxDiskUsagePerURL=35GiB diff --git a/internal/controller/operator/factory/vmalert/vmalert.go b/internal/controller/operator/factory/vmalert/vmalert.go index 4ee40ac41..28e665a94 100644 --- a/internal/controller/operator/factory/vmalert/vmalert.go +++ b/internal/controller/operator/factory/vmalert/vmalert.go @@ -522,7 +522,7 @@ func buildArgs(cr *vmv1beta1.VMAlert, ruleConfigMapNames []string, ac *build.Ass } args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmalert/vmalert_test.go b/internal/controller/operator/factory/vmalert/vmalert_test.go index 13e378e6b..aed398fc2 100644 --- a/internal/controller/operator/factory/vmalert/vmalert_test.go +++ b/internal/controller/operator/factory/vmalert/vmalert_test.go @@ -682,7 +682,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, }, ruleConfigMapNames: []string{"first-rule-cm.yaml"}, - want: []string{"-datasource.url=http://vmsingle-url", "-http.shutdownDelay=50s", "-httpListenAddr=:", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, + want: []string{"-datasource.url=http://vmsingle-url", "-http.shutdownDelay=30s", "-httpListenAddr=:", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, }) // with tls args @@ -712,7 +712,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, }, ruleConfigMapNames: []string{"first-rule-cm.yaml"}, - want: []string{"--datasource.headers=x-org-id:one^^x-org-tenant:5", "-datasource.tlsCAFile=/path/to/sa", "-datasource.tlsInsecureSkipVerify=true", "-datasource.tlsKeyFile=/path/to/key", "-datasource.url=http://vmsingle-url", "-http.shutdownDelay=50s", "-httpListenAddr=:", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, + want: []string{"--datasource.headers=x-org-id:one^^x-org-tenant:5", "-datasource.tlsCAFile=/path/to/sa", "-datasource.tlsInsecureSkipVerify=true", "-datasource.tlsKeyFile=/path/to/key", "-datasource.url=http://vmsingle-url", "-http.shutdownDelay=30s", "-httpListenAddr=:", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, }) // with static and selector notifiers @@ -786,7 +786,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, want: []string{ "-datasource.url=http://some-vm-datasource", - "-http.shutdownDelay=50s", + "-http.shutdownDelay=30s", "-httpListenAddr=:", "-notifier.tlsCAFile=,/tmp/ca.cert,,,", "-notifier.tlsCertFile=,/tmp/cert.pem,,,", diff --git a/internal/controller/operator/factory/vmauth/vmauth.go b/internal/controller/operator/factory/vmauth/vmauth.go index 58df5148a..3a1efcbb6 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -326,7 +326,7 @@ func makeSpecForVMAuth(cr *vmv1beta1.VMAuth) (*corev1.PodTemplateSpec, error) { return nil, fmt.Errorf("cannot apply patch for initContainers: %w", err) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmauth/vmauth_test.go b/internal/controller/operator/factory/vmauth/vmauth_test.go index a1ff3e2ed..923b0096f 100644 --- a/internal/controller/operator/factory/vmauth/vmauth_test.go +++ b/internal/controller/operator/factory/vmauth/vmauth_test.go @@ -471,7 +471,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8429 ports: - name: http @@ -583,7 +583,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8429 ports: - name: http diff --git a/internal/controller/operator/factory/vmcluster/vmcluster.go b/internal/controller/operator/factory/vmcluster/vmcluster.go index e1cde1c9d..0b107f8bd 100644 --- a/internal/controller/operator/factory/vmcluster/vmcluster.go +++ b/internal/controller/operator/factory/vmcluster/vmcluster.go @@ -657,7 +657,7 @@ func makePodSpecForVMSelect(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMSelect.ExtraArgs, "-") sort.Strings(args) vmselectContainer := corev1.Container{ @@ -862,7 +862,7 @@ func makePodSpecForVMInsert(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMInsert.ExtraArgs, "-") sort.Strings(args) @@ -1083,7 +1083,7 @@ func makePodSpecForVMStorage(ctx context.Context, cr *vmv1beta1.VMCluster) (*cor volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ @@ -1511,7 +1511,7 @@ func buildVMAuthLBDeployment(cr *vmv1beta1.VMCluster) (*appsv1.Deployment, error volumes, vmounts = build.LicenseVolumeTo(volumes, vmounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vmsingle/vmsingle.go b/internal/controller/operator/factory/vmsingle/vmsingle.go index af9809630..86f67441f 100644 --- a/internal/controller/operator/factory/vmsingle/vmsingle.go +++ b/internal/controller/operator/factory/vmsingle/vmsingle.go @@ -329,7 +329,7 @@ func newPodSpec(ctx context.Context, cr *vmv1beta1.VMSingle) (*corev1.PodTemplat volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) vmsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/cluster_test.go b/internal/controller/operator/factory/vtcluster/cluster_test.go index c8cb94db7..9a0a9922a 100644 --- a/internal/controller/operator/factory/vtcluster/cluster_test.go +++ b/internal/controller/operator/factory/vtcluster/cluster_test.go @@ -100,7 +100,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentInsert), Namespace: cr.Namespace}, &dep)) assert.Len(t, dep.Spec.Template.Spec.Containers, 1) cnt := dep.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:10481", "-internalselect.disable=true", "-storageNode=vtstorage-base-0.vtstorage-base.default:10491,vtstorage-base-1.vtstorage-base.default:10491"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=30s", "-httpListenAddr=:10481", "-internalselect.disable=true", "-storageNode=vtstorage-base-0.vtstorage-base.default:10491,vtstorage-base-1.vtstorage-base.default:10491"}) assert.Nil(t, dep.Annotations) assert.Equal(t, dep.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentInsert)) @@ -108,7 +108,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentSelect), Namespace: cr.Namespace}, &dep)) assert.Len(t, dep.Spec.Template.Spec.Containers, 1) cnt = dep.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:10471", "-internalinsert.disable=true", "-storageNode=vtstorage-base-0.vtstorage-base.default:10491,vtstorage-base-1.vtstorage-base.default:10491"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=30s", "-httpListenAddr=:10471", "-internalinsert.disable=true", "-storageNode=vtstorage-base-0.vtstorage-base.default:10491,vtstorage-base-1.vtstorage-base.default:10491"}) assert.Nil(t, dep.Annotations) assert.Equal(t, dep.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentSelect)) @@ -117,7 +117,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), Namespace: cr.Namespace}, &sts)) assert.Len(t, sts.Spec.Template.Spec.Containers, 1) cnt = sts.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=50s", "-httpListenAddr=:10491", "-storageDataPath=/vtstorage-data"}) + assert.Equal(t, cnt.Args, []string{"-http.shutdownDelay=30s", "-httpListenAddr=:10491", "-storageDataPath=/vtstorage-data"}) assert.Nil(t, sts.Annotations) assert.Equal(t, sts.Labels, cr.FinalLabels(vmv1beta1.ClusterComponentStorage)) }, @@ -147,7 +147,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.Nil(t, rclient.Get(ctx, types.NamespacedName{Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), Namespace: cr.Namespace}, &sts)) assert.Len(t, sts.Spec.Template.Spec.Containers, 1) cnt := sts.Spec.Template.Spec.Containers[0] - assert.Equal(t, cnt.Args, []string{"-futureRetention=2d", "-http.shutdownDelay=50s", "-httpListenAddr=:10491", "-retention.maxDiskSpaceUsageBytes=5GB", "-retentionPeriod=1w", "-storageDataPath=/vtstorage-data"}) + assert.Equal(t, cnt.Args, []string{"-futureRetention=2d", "-http.shutdownDelay=30s", "-httpListenAddr=:10491", "-retention.maxDiskSpaceUsageBytes=5GB", "-retentionPeriod=1w", "-storageDataPath=/vtstorage-data"}) }, }) diff --git a/internal/controller/operator/factory/vtcluster/insert.go b/internal/controller/operator/factory/vtcluster/insert.go index b81fe3cee..9e0f88bb4 100644 --- a/internal/controller/operator/factory/vtcluster/insert.go +++ b/internal/controller/operator/factory/vtcluster/insert.go @@ -196,7 +196,7 @@ func buildVTInsertPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Insert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vtcluster/select.go b/internal/controller/operator/factory/vtcluster/select.go index a8bc485a8..b22018a3e 100644 --- a/internal/controller/operator/factory/vtcluster/select.go +++ b/internal/controller/operator/factory/vtcluster/select.go @@ -303,7 +303,7 @@ func buildVTSelectPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Select.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/storage.go b/internal/controller/operator/factory/vtcluster/storage.go index ba05d512b..17331b786 100644 --- a/internal/controller/operator/factory/vtcluster/storage.go +++ b/internal/controller/operator/factory/vtcluster/storage.go @@ -303,7 +303,7 @@ func buildVTStoragePodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Storage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtsingle/vtsingle.go b/internal/controller/operator/factory/vtsingle/vtsingle.go index 70189055d..35d0ebdee 100644 --- a/internal/controller/operator/factory/vtsingle/vtsingle.go +++ b/internal/controller/operator/factory/vtsingle/vtsingle.go @@ -226,7 +226,7 @@ func makePodSpec(r *vmv1.VTSingle) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.EmbeddedProbes) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vtsingleContainer := corev1.Container{ From feb404331379fa4b87cd9f44a833feb896fd40f8 Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:57:23 +0300 Subject: [PATCH 06/10] change shutdownDelay only for new resources delete setting default terminationGracePeriodSeconds to 30s --- .../operator/factory/build/container.go | 7 +++++- .../operator/factory/build/container_test.go | 19 +++++++++++++-- .../operator/factory/build/daemonset.go | 3 --- .../operator/factory/build/deployment.go | 3 --- .../operator/factory/build/statefulset.go | 3 --- .../operator/factory/vlagent/vlagent.go | 2 +- .../operator/factory/vlagent/vlagent_test.go | 24 ------------------- .../operator/factory/vlcluster/vlinsert.go | 2 +- .../operator/factory/vlcluster/vlselect.go | 2 +- .../operator/factory/vlcluster/vlstorage.go | 2 +- .../operator/factory/vlcluster/vmauth_lb.go | 2 +- .../operator/factory/vlsingle/vlsingle.go | 2 +- .../operator/factory/vmagent/vmagent.go | 2 +- .../operator/factory/vmalert/vmalert.go | 2 +- .../operator/factory/vmauth/vmauth.go | 2 +- .../operator/factory/vmcluster/vmcluster.go | 8 +++---- .../operator/factory/vmsingle/vmsingle.go | 2 +- .../operator/factory/vtcluster/insert.go | 2 +- .../operator/factory/vtcluster/select.go | 2 +- .../operator/factory/vtcluster/storage.go | 2 +- .../operator/factory/vtsingle/vtsingle.go | 2 +- 21 files changed, 41 insertions(+), 54 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index 29042921a..9972c8991 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -223,11 +223,16 @@ const ( // AddHTTPShutdownDelayArg adds default -http.shutdownDelay flag if user didn't override it in extraArgs. // The delay is derived from terminationGracePeriodSeconds. -func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, terminationGracePeriodSeconds *int64) []string { +// It is added only for new resources +func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, terminationGracePeriodSeconds *int64, isNewResource bool) []string { if _, ok := extraArgs["http.shutdownDelay"]; ok { return args } + if !isNewResource { + return args + } + var delaySeconds int64 if terminationGracePeriodSeconds != nil { delaySeconds = *terminationGracePeriodSeconds diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index 027bef4de..64479877d 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -210,40 +210,55 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { type opts struct { extraArgs map[string]string terminationGracePeriodSeconds *int64 + isNewResource bool wantArgs []string } f := func(opts opts) { t.Helper() assert.Equal( t, - AddHTTPShutdownDelayArg(nil, opts.extraArgs, opts.terminationGracePeriodSeconds), + AddHTTPShutdownDelayArg(nil, opts.extraArgs, opts.terminationGracePeriodSeconds, opts.isNewResource), opts.wantArgs, ) } + // new resource, no explicit settings f(opts{ extraArgs: nil, terminationGracePeriodSeconds: nil, + isNewResource: true, wantArgs: []string{"-http.shutdownDelay=30s"}, }) + f(opts{ + extraArgs: nil, + terminationGracePeriodSeconds: nil, + isNewResource: false, + wantArgs: nil, + }) //if extraArg already exists, no more args should be added, it will be added later in the process of adding extra args f(opts{ extraArgs: map[string]string{"http.shutdownDelay": "5s"}, terminationGracePeriodSeconds: nil, + isNewResource: true, wantArgs: nil, }) + // new resource with explicit terminationGracePeriodSeconds f(opts{ extraArgs: nil, terminationGracePeriodSeconds: ptr.To[int64](60), + isNewResource: true, wantArgs: []string{"-http.shutdownDelay=60s"}, }) + // existing resource with explicit terminationGracePeriodSeconds f(opts{ extraArgs: nil, terminationGracePeriodSeconds: ptr.To[int64](120), - wantArgs: []string{"-http.shutdownDelay=120s"}, + isNewResource: false, + wantArgs: nil, }) f(opts{ extraArgs: map[string]string{"http.shutdownDelay": "20s"}, terminationGracePeriodSeconds: ptr.To[int64](120), + isNewResource: true, wantArgs: nil, }) } diff --git a/internal/controller/operator/factory/build/daemonset.go b/internal/controller/operator/factory/build/daemonset.go index e7f45894f..82fe165b3 100644 --- a/internal/controller/operator/factory/build/daemonset.go +++ b/internal/controller/operator/factory/build/daemonset.go @@ -23,9 +23,6 @@ func DaemonSetAddCommonParams(dst *appsv1.DaemonSet, useStrictSecurity bool, par dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsWithRootToPod(params.SecurityContext, useStrictSecurity) - if params.TerminationGracePeriodSeconds == nil { - params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) - } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets diff --git a/internal/controller/operator/factory/build/deployment.go b/internal/controller/operator/factory/build/deployment.go index a95d89a94..7e92f6e19 100644 --- a/internal/controller/operator/factory/build/deployment.go +++ b/internal/controller/operator/factory/build/deployment.go @@ -23,9 +23,6 @@ func DeploymentAddCommonParams(dst *appsv1.Deployment, useStrictSecurity bool, p dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsToPod(params.SecurityContext, useStrictSecurity) - if params.TerminationGracePeriodSeconds == nil { - params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) - } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets diff --git a/internal/controller/operator/factory/build/statefulset.go b/internal/controller/operator/factory/build/statefulset.go index dd7c03e54..8e6ef83e1 100644 --- a/internal/controller/operator/factory/build/statefulset.go +++ b/internal/controller/operator/factory/build/statefulset.go @@ -23,9 +23,6 @@ func StatefulSetAddCommonParams(dst *appsv1.StatefulSet, useStrictSecurity bool, dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsToPod(params.SecurityContext, useStrictSecurity) - if params.TerminationGracePeriodSeconds == nil { - params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) - } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets diff --git a/internal/controller/operator/factory/vlagent/vlagent.go b/internal/controller/operator/factory/vlagent/vlagent.go index ae269fdec..24a772456 100644 --- a/internal/controller/operator/factory/vlagent/vlagent.go +++ b/internal/controller/operator/factory/vlagent/vlagent.go @@ -425,7 +425,7 @@ func newPodSpec(cr *vmv1.VLAgent) (*corev1.PodSpec, error) { agentVolumeMounts = append(agentVolumeMounts, cvm) } volumes, agentVolumeMounts = addRemoteWriteAssetsToVolumes(volumes, agentVolumeMounts, cr) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlagent/vlagent_test.go b/internal/controller/operator/factory/vlagent/vlagent_test.go index f72bd8cdf..faf086e8d 100644 --- a/internal/controller/operator/factory/vlagent/vlagent_test.go +++ b/internal/controller/operator/factory/vlagent/vlagent_test.go @@ -322,30 +322,6 @@ func TestCreateOrUpdate(t *testing.T) { }, }) - // test default terminationGracePeriodSeconds when not set - f(opts{ - cr: &vmv1.VLAgent{ - ObjectMeta: metav1.ObjectMeta{ - Name: "example-agent-default-grace", - Namespace: "default", - }, - Spec: vmv1.VLAgentSpec{ - RemoteWrite: []vmv1.VLAgentRemoteWriteSpec{ - {URL: "http://remote-write"}, - }, - CommonApplicationDeploymentParams: vmv1beta1.CommonApplicationDeploymentParams{ - ReplicaCount: ptr.To(int32(1)), - }, - }, - }, - validate: func(got *appsv1.StatefulSet) { - // should get default 30s - assert.NotNil(t, got.Spec.Template.Spec.TerminationGracePeriodSeconds) - assert.Equal(t, int64(30), *got.Spec.Template.Spec.TerminationGracePeriodSeconds) - cnt := got.Spec.Template.Spec.Containers[0] - assert.Contains(t, cnt.Args, "-http.shutdownDelay=30s") - }, - }) } func TestBuildRemoteWriteArgs(t *testing.T) { diff --git a/internal/controller/operator/factory/vlcluster/vlinsert.go b/internal/controller/operator/factory/vlcluster/vlinsert.go index 568b452f4..63bd4a2ba 100644 --- a/internal/controller/operator/factory/vlcluster/vlinsert.go +++ b/internal/controller/operator/factory/vlcluster/vlinsert.go @@ -206,7 +206,7 @@ func buildVLInsertPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLInsert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlcluster/vlselect.go b/internal/controller/operator/factory/vlcluster/vlselect.go index 65560f54a..5b85ca9e4 100644 --- a/internal/controller/operator/factory/vlcluster/vlselect.go +++ b/internal/controller/operator/factory/vlcluster/vlselect.go @@ -307,7 +307,7 @@ func buildVLSelectPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLSelect.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vlstorage.go b/internal/controller/operator/factory/vlcluster/vlstorage.go index 02a59f1f8..2e8a6eda6 100644 --- a/internal/controller/operator/factory/vlcluster/vlstorage.go +++ b/internal/controller/operator/factory/vlcluster/vlstorage.go @@ -309,7 +309,7 @@ func buildVLStoragePodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vmauth_lb.go b/internal/controller/operator/factory/vlcluster/vmauth_lb.go index 4ff7ca676..6cc0d8d80 100644 --- a/internal/controller/operator/factory/vlcluster/vmauth_lb.go +++ b/internal/controller/operator/factory/vlcluster/vmauth_lb.go @@ -161,7 +161,7 @@ func buildVMauthLBDeployment(cr *vmv1.VLCluster) (*appsv1.Deployment, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vlsingle/vlsingle.go b/internal/controller/operator/factory/vlsingle/vlsingle.go index 497778c14..19f05564d 100644 --- a/internal/controller/operator/factory/vlsingle/vlsingle.go +++ b/internal/controller/operator/factory/vlsingle/vlsingle.go @@ -235,7 +235,7 @@ func makePodSpec(r *vmv1.VLSingle) (*corev1.PodTemplateSpec, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, r.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, r.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds, r.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vlsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vmagent/vmagent.go b/internal/controller/operator/factory/vmagent/vmagent.go index 6a6d9c1ac..dc18dbc87 100644 --- a/internal/controller/operator/factory/vmagent/vmagent.go +++ b/internal/controller/operator/factory/vmagent/vmagent.go @@ -656,7 +656,7 @@ func newPodSpec(cr *vmv1beta1.VMAgent, ac *build.AssetsCache) (*corev1.PodSpec, args = build.StreamAggrArgsTo(args, "streamAggr", streamAggrKeys, streamAggrConfigs...) args = build.AppendArgsForInsertPorts(args, cr.Spec.InsertPorts) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmalert/vmalert.go b/internal/controller/operator/factory/vmalert/vmalert.go index 28e665a94..be4346698 100644 --- a/internal/controller/operator/factory/vmalert/vmalert.go +++ b/internal/controller/operator/factory/vmalert/vmalert.go @@ -522,7 +522,7 @@ func buildArgs(cr *vmv1beta1.VMAlert, ruleConfigMapNames []string, ac *build.Ass } args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmauth/vmauth.go b/internal/controller/operator/factory/vmauth/vmauth.go index 3a1efcbb6..493c09c77 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -326,7 +326,7 @@ func makeSpecForVMAuth(cr *vmv1beta1.VMAuth) (*corev1.PodTemplateSpec, error) { return nil, fmt.Errorf("cannot apply patch for initContainers: %w", err) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmcluster/vmcluster.go b/internal/controller/operator/factory/vmcluster/vmcluster.go index 0b107f8bd..515ca8dc1 100644 --- a/internal/controller/operator/factory/vmcluster/vmcluster.go +++ b/internal/controller/operator/factory/vmcluster/vmcluster.go @@ -657,7 +657,7 @@ func makePodSpecForVMSelect(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMSelect.ExtraArgs, "-") sort.Strings(args) vmselectContainer := corev1.Container{ @@ -862,7 +862,7 @@ func makePodSpecForVMInsert(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMInsert.ExtraArgs, "-") sort.Strings(args) @@ -1083,7 +1083,7 @@ func makePodSpecForVMStorage(ctx context.Context, cr *vmv1beta1.VMCluster) (*cor volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ @@ -1511,7 +1511,7 @@ func buildVMAuthLBDeployment(cr *vmv1beta1.VMCluster) (*appsv1.Deployment, error volumes, vmounts = build.LicenseVolumeTo(volumes, vmounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vmsingle/vmsingle.go b/internal/controller/operator/factory/vmsingle/vmsingle.go index 86f67441f..390fff9fa 100644 --- a/internal/controller/operator/factory/vmsingle/vmsingle.go +++ b/internal/controller/operator/factory/vmsingle/vmsingle.go @@ -329,7 +329,7 @@ func newPodSpec(ctx context.Context, cr *vmv1beta1.VMSingle) (*corev1.PodTemplat volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) vmsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/insert.go b/internal/controller/operator/factory/vtcluster/insert.go index 9e0f88bb4..f4c80ffdf 100644 --- a/internal/controller/operator/factory/vtcluster/insert.go +++ b/internal/controller/operator/factory/vtcluster/insert.go @@ -196,7 +196,7 @@ func buildVTInsertPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Insert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vtcluster/select.go b/internal/controller/operator/factory/vtcluster/select.go index b22018a3e..a3c76f6dc 100644 --- a/internal/controller/operator/factory/vtcluster/select.go +++ b/internal/controller/operator/factory/vtcluster/select.go @@ -303,7 +303,7 @@ func buildVTSelectPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Select.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/storage.go b/internal/controller/operator/factory/vtcluster/storage.go index 17331b786..749196642 100644 --- a/internal/controller/operator/factory/vtcluster/storage.go +++ b/internal/controller/operator/factory/vtcluster/storage.go @@ -303,7 +303,7 @@ func buildVTStoragePodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Storage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtsingle/vtsingle.go b/internal/controller/operator/factory/vtsingle/vtsingle.go index 35d0ebdee..39861f226 100644 --- a/internal/controller/operator/factory/vtsingle/vtsingle.go +++ b/internal/controller/operator/factory/vtsingle/vtsingle.go @@ -226,7 +226,7 @@ func makePodSpec(r *vmv1.VTSingle) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds, r.ParsedLastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vtsingleContainer := corev1.Container{ From 47cfdd716ea668e007c7f0046c274571353e9cf1 Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:42:35 +0300 Subject: [PATCH 07/10] add default terminationGracePeriodSeconds --- internal/controller/operator/factory/build/container.go | 4 +--- internal/controller/operator/factory/build/daemonset.go | 3 +++ internal/controller/operator/factory/build/defaults.go | 5 ----- internal/controller/operator/factory/build/deployment.go | 3 +++ internal/controller/operator/factory/build/statefulset.go | 3 +++ 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index 9972c8991..746a51cbb 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -233,11 +233,9 @@ func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, termina return args } - var delaySeconds int64 + delaySeconds := DefaultTerminationGracePeriodSeconds if terminationGracePeriodSeconds != nil { delaySeconds = *terminationGracePeriodSeconds - } else { - delaySeconds = DefaultTerminationGracePeriodSeconds } args = append(args, fmt.Sprintf("-http.shutdownDelay=%ds", delaySeconds)) diff --git a/internal/controller/operator/factory/build/daemonset.go b/internal/controller/operator/factory/build/daemonset.go index 82fe165b3..e7f45894f 100644 --- a/internal/controller/operator/factory/build/daemonset.go +++ b/internal/controller/operator/factory/build/daemonset.go @@ -23,6 +23,9 @@ func DaemonSetAddCommonParams(dst *appsv1.DaemonSet, useStrictSecurity bool, par dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsWithRootToPod(params.SecurityContext, useStrictSecurity) + if params.TerminationGracePeriodSeconds == nil { + params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) + } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets diff --git a/internal/controller/operator/factory/build/defaults.go b/internal/controller/operator/factory/build/defaults.go index 98ced86c4..db920ca2e 100644 --- a/internal/controller/operator/factory/build/defaults.go +++ b/internal/controller/operator/factory/build/defaults.go @@ -347,8 +347,6 @@ const ( vmStorageDefaultDBPath = "vmstorage-data" ) -var defaultTerminationGracePeriod = DefaultTerminationGracePeriodSeconds - func addVMClusterSpecDefaults(spec *vmv1beta1.VMClusterSpec) { c := getCfg() @@ -409,9 +407,6 @@ func addVMClusterSpecDefaults(spec *vmv1beta1.VMClusterSpec) { if spec.VMStorage.StorageDataPath == "" { spec.VMStorage.StorageDataPath = vmStorageDefaultDBPath } - if spec.VMStorage.TerminationGracePeriodSeconds == nil { - spec.VMStorage.TerminationGracePeriodSeconds = &defaultTerminationGracePeriod - } if spec.VMStorage.UseDefaultResources == nil { spec.VMStorage.UseDefaultResources = &c.VMCluster.UseDefaultResources } diff --git a/internal/controller/operator/factory/build/deployment.go b/internal/controller/operator/factory/build/deployment.go index 7e92f6e19..a95d89a94 100644 --- a/internal/controller/operator/factory/build/deployment.go +++ b/internal/controller/operator/factory/build/deployment.go @@ -23,6 +23,9 @@ func DeploymentAddCommonParams(dst *appsv1.Deployment, useStrictSecurity bool, p dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsToPod(params.SecurityContext, useStrictSecurity) + if params.TerminationGracePeriodSeconds == nil { + params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) + } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets diff --git a/internal/controller/operator/factory/build/statefulset.go b/internal/controller/operator/factory/build/statefulset.go index 8e6ef83e1..dd7c03e54 100644 --- a/internal/controller/operator/factory/build/statefulset.go +++ b/internal/controller/operator/factory/build/statefulset.go @@ -23,6 +23,9 @@ func StatefulSetAddCommonParams(dst *appsv1.StatefulSet, useStrictSecurity bool, dst.Spec.Template.Spec.DNSConfig = params.DNSConfig dst.Spec.Template.Spec.NodeSelector = params.NodeSelector dst.Spec.Template.Spec.SecurityContext = AddStrictSecuritySettingsToPod(params.SecurityContext, useStrictSecurity) + if params.TerminationGracePeriodSeconds == nil { + params.TerminationGracePeriodSeconds = ptr.To(DefaultTerminationGracePeriodSeconds) + } dst.Spec.Template.Spec.TerminationGracePeriodSeconds = params.TerminationGracePeriodSeconds dst.Spec.Template.Spec.TopologySpreadConstraints = params.TopologySpreadConstraints dst.Spec.Template.Spec.ImagePullSecrets = params.ImagePullSecrets From 6dfaccc9ac0c644e7fb8e8ca90499d8608d6d3f8 Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Fri, 27 Feb 2026 16:09:59 +0300 Subject: [PATCH 08/10] change LastAppliedSpec due to rework --- internal/controller/operator/factory/vlagent/vlagent.go | 2 +- .../controller/operator/factory/vlcluster/vlinsert.go | 2 +- .../controller/operator/factory/vlcluster/vlselect.go | 2 +- .../controller/operator/factory/vlcluster/vlstorage.go | 2 +- .../controller/operator/factory/vlcluster/vmauth_lb.go | 2 +- internal/controller/operator/factory/vlsingle/vlsingle.go | 2 +- internal/controller/operator/factory/vmagent/vmagent.go | 2 +- internal/controller/operator/factory/vmalert/vmalert.go | 2 +- internal/controller/operator/factory/vmauth/vmauth.go | 2 +- .../controller/operator/factory/vmcluster/vmcluster.go | 8 ++++---- internal/controller/operator/factory/vmsingle/vmsingle.go | 2 +- internal/controller/operator/factory/vtcluster/insert.go | 2 +- internal/controller/operator/factory/vtcluster/select.go | 2 +- internal/controller/operator/factory/vtcluster/storage.go | 2 +- internal/controller/operator/factory/vtsingle/vtsingle.go | 2 +- 15 files changed, 18 insertions(+), 18 deletions(-) diff --git a/internal/controller/operator/factory/vlagent/vlagent.go b/internal/controller/operator/factory/vlagent/vlagent.go index 24a772456..0dea2eb43 100644 --- a/internal/controller/operator/factory/vlagent/vlagent.go +++ b/internal/controller/operator/factory/vlagent/vlagent.go @@ -425,7 +425,7 @@ func newPodSpec(cr *vmv1.VLAgent) (*corev1.PodSpec, error) { agentVolumeMounts = append(agentVolumeMounts, cvm) } volumes, agentVolumeMounts = addRemoteWriteAssetsToVolumes(volumes, agentVolumeMounts, cr) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlcluster/vlinsert.go b/internal/controller/operator/factory/vlcluster/vlinsert.go index 63bd4a2ba..fe024cd78 100644 --- a/internal/controller/operator/factory/vlcluster/vlinsert.go +++ b/internal/controller/operator/factory/vlcluster/vlinsert.go @@ -206,7 +206,7 @@ func buildVLInsertPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLInsert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlcluster/vlselect.go b/internal/controller/operator/factory/vlcluster/vlselect.go index 5b85ca9e4..4f22715dd 100644 --- a/internal/controller/operator/factory/vlcluster/vlselect.go +++ b/internal/controller/operator/factory/vlcluster/vlselect.go @@ -307,7 +307,7 @@ func buildVLSelectPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLSelect.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vlstorage.go b/internal/controller/operator/factory/vlcluster/vlstorage.go index 2e8a6eda6..b450e9b2c 100644 --- a/internal/controller/operator/factory/vlcluster/vlstorage.go +++ b/internal/controller/operator/factory/vlcluster/vlstorage.go @@ -309,7 +309,7 @@ func buildVLStoragePodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vmauth_lb.go b/internal/controller/operator/factory/vlcluster/vmauth_lb.go index 6cc0d8d80..8a2768823 100644 --- a/internal/controller/operator/factory/vlcluster/vmauth_lb.go +++ b/internal/controller/operator/factory/vlcluster/vmauth_lb.go @@ -161,7 +161,7 @@ func buildVMauthLBDeployment(cr *vmv1.VLCluster) (*appsv1.Deployment, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vlsingle/vlsingle.go b/internal/controller/operator/factory/vlsingle/vlsingle.go index 19f05564d..2326675d3 100644 --- a/internal/controller/operator/factory/vlsingle/vlsingle.go +++ b/internal/controller/operator/factory/vlsingle/vlsingle.go @@ -235,7 +235,7 @@ func makePodSpec(r *vmv1.VLSingle) (*corev1.PodTemplateSpec, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, r.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, r.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds, r.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds, r.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vlsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vmagent/vmagent.go b/internal/controller/operator/factory/vmagent/vmagent.go index dc18dbc87..1c9ba0329 100644 --- a/internal/controller/operator/factory/vmagent/vmagent.go +++ b/internal/controller/operator/factory/vmagent/vmagent.go @@ -656,7 +656,7 @@ func newPodSpec(cr *vmv1beta1.VMAgent, ac *build.AssetsCache) (*corev1.PodSpec, args = build.StreamAggrArgsTo(args, "streamAggr", streamAggrKeys, streamAggrConfigs...) args = build.AppendArgsForInsertPorts(args, cr.Spec.InsertPorts) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmalert/vmalert.go b/internal/controller/operator/factory/vmalert/vmalert.go index be4346698..7a9515f23 100644 --- a/internal/controller/operator/factory/vmalert/vmalert.go +++ b/internal/controller/operator/factory/vmalert/vmalert.go @@ -522,7 +522,7 @@ func buildArgs(cr *vmv1beta1.VMAlert, ruleConfigMapNames []string, ac *build.Ass } args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmauth/vmauth.go b/internal/controller/operator/factory/vmauth/vmauth.go index 493c09c77..938043165 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -326,7 +326,7 @@ func makeSpecForVMAuth(cr *vmv1beta1.VMAuth) (*corev1.PodTemplateSpec, error) { return nil, fmt.Errorf("cannot apply patch for initContainers: %w", err) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmcluster/vmcluster.go b/internal/controller/operator/factory/vmcluster/vmcluster.go index 515ca8dc1..e8d68aa89 100644 --- a/internal/controller/operator/factory/vmcluster/vmcluster.go +++ b/internal/controller/operator/factory/vmcluster/vmcluster.go @@ -657,7 +657,7 @@ func makePodSpecForVMSelect(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMSelect.ExtraArgs, "-") sort.Strings(args) vmselectContainer := corev1.Container{ @@ -862,7 +862,7 @@ func makePodSpecForVMInsert(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMInsert.ExtraArgs, "-") sort.Strings(args) @@ -1083,7 +1083,7 @@ func makePodSpecForVMStorage(ctx context.Context, cr *vmv1beta1.VMCluster) (*cor volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ @@ -1511,7 +1511,7 @@ func buildVMAuthLBDeployment(cr *vmv1beta1.VMCluster) (*appsv1.Deployment, error volumes, vmounts = build.LicenseVolumeTo(volumes, vmounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vmsingle/vmsingle.go b/internal/controller/operator/factory/vmsingle/vmsingle.go index 390fff9fa..fc1e20dbb 100644 --- a/internal/controller/operator/factory/vmsingle/vmsingle.go +++ b/internal/controller/operator/factory/vmsingle/vmsingle.go @@ -329,7 +329,7 @@ func newPodSpec(ctx context.Context, cr *vmv1beta1.VMSingle) (*corev1.PodTemplat volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) vmsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/insert.go b/internal/controller/operator/factory/vtcluster/insert.go index f4c80ffdf..0b82293c5 100644 --- a/internal/controller/operator/factory/vtcluster/insert.go +++ b/internal/controller/operator/factory/vtcluster/insert.go @@ -196,7 +196,7 @@ func buildVTInsertPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Insert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vtcluster/select.go b/internal/controller/operator/factory/vtcluster/select.go index a3c76f6dc..465c9da05 100644 --- a/internal/controller/operator/factory/vtcluster/select.go +++ b/internal/controller/operator/factory/vtcluster/select.go @@ -303,7 +303,7 @@ func buildVTSelectPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Select.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/storage.go b/internal/controller/operator/factory/vtcluster/storage.go index 749196642..7ea265894 100644 --- a/internal/controller/operator/factory/vtcluster/storage.go +++ b/internal/controller/operator/factory/vtcluster/storage.go @@ -303,7 +303,7 @@ func buildVTStoragePodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.TerminationGracePeriodSeconds, cr.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Storage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtsingle/vtsingle.go b/internal/controller/operator/factory/vtsingle/vtsingle.go index 39861f226..83f650581 100644 --- a/internal/controller/operator/factory/vtsingle/vtsingle.go +++ b/internal/controller/operator/factory/vtsingle/vtsingle.go @@ -226,7 +226,7 @@ func makePodSpec(r *vmv1.VTSingle) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds, r.ParsedLastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds, r.Status.LastAppliedSpec == nil) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vtsingleContainer := corev1.Container{ From 0c0768aa34bdb37f9d2eb03d35164a685bf013d9 Mon Sep 17 00:00:00 2001 From: Endesapt <103508859+Endesapt@users.noreply.github.com> Date: Sat, 28 Feb 2026 16:03:15 +0300 Subject: [PATCH 09/10] revert "freshness" check --- .../operator/factory/build/container.go | 6 +----- .../operator/factory/build/container_test.go | 20 +------------------ .../operator/factory/vlagent/vlagent.go | 2 +- .../operator/factory/vlcluster/vlinsert.go | 2 +- .../operator/factory/vlcluster/vlselect.go | 2 +- .../operator/factory/vlcluster/vlstorage.go | 2 +- .../operator/factory/vlcluster/vmauth_lb.go | 2 +- .../operator/factory/vlsingle/vlsingle.go | 2 +- .../operator/factory/vmagent/vmagent.go | 2 +- .../operator/factory/vmalert/vmalert.go | 2 +- .../operator/factory/vmauth/vmauth.go | 2 +- .../operator/factory/vmcluster/vmcluster.go | 8 ++++---- .../operator/factory/vmsingle/vmsingle.go | 2 +- .../operator/factory/vtcluster/insert.go | 2 +- .../operator/factory/vtcluster/select.go | 2 +- .../operator/factory/vtcluster/storage.go | 2 +- .../operator/factory/vtsingle/vtsingle.go | 2 +- 17 files changed, 20 insertions(+), 42 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index 746a51cbb..0de9bd42b 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -224,15 +224,11 @@ const ( // AddHTTPShutdownDelayArg adds default -http.shutdownDelay flag if user didn't override it in extraArgs. // The delay is derived from terminationGracePeriodSeconds. // It is added only for new resources -func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, terminationGracePeriodSeconds *int64, isNewResource bool) []string { +func AddHTTPShutdownDelayArg(args []string, extraArgs map[string]string, terminationGracePeriodSeconds *int64) []string { if _, ok := extraArgs["http.shutdownDelay"]; ok { return args } - if !isNewResource { - return args - } - delaySeconds := DefaultTerminationGracePeriodSeconds if terminationGracePeriodSeconds != nil { delaySeconds = *terminationGracePeriodSeconds diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index 64479877d..f41629a0c 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -210,14 +210,13 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { type opts struct { extraArgs map[string]string terminationGracePeriodSeconds *int64 - isNewResource bool wantArgs []string } f := func(opts opts) { t.Helper() assert.Equal( t, - AddHTTPShutdownDelayArg(nil, opts.extraArgs, opts.terminationGracePeriodSeconds, opts.isNewResource), + AddHTTPShutdownDelayArg(nil, opts.extraArgs, opts.terminationGracePeriodSeconds), opts.wantArgs, ) } @@ -225,40 +224,23 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { f(opts{ extraArgs: nil, terminationGracePeriodSeconds: nil, - isNewResource: true, wantArgs: []string{"-http.shutdownDelay=30s"}, }) - f(opts{ - extraArgs: nil, - terminationGracePeriodSeconds: nil, - isNewResource: false, - wantArgs: nil, - }) //if extraArg already exists, no more args should be added, it will be added later in the process of adding extra args f(opts{ extraArgs: map[string]string{"http.shutdownDelay": "5s"}, terminationGracePeriodSeconds: nil, - isNewResource: true, wantArgs: nil, }) // new resource with explicit terminationGracePeriodSeconds f(opts{ extraArgs: nil, terminationGracePeriodSeconds: ptr.To[int64](60), - isNewResource: true, wantArgs: []string{"-http.shutdownDelay=60s"}, }) - // existing resource with explicit terminationGracePeriodSeconds - f(opts{ - extraArgs: nil, - terminationGracePeriodSeconds: ptr.To[int64](120), - isNewResource: false, - wantArgs: nil, - }) f(opts{ extraArgs: map[string]string{"http.shutdownDelay": "20s"}, terminationGracePeriodSeconds: ptr.To[int64](120), - isNewResource: true, wantArgs: nil, }) } diff --git a/internal/controller/operator/factory/vlagent/vlagent.go b/internal/controller/operator/factory/vlagent/vlagent.go index 0dea2eb43..ae269fdec 100644 --- a/internal/controller/operator/factory/vlagent/vlagent.go +++ b/internal/controller/operator/factory/vlagent/vlagent.go @@ -425,7 +425,7 @@ func newPodSpec(cr *vmv1.VLAgent) (*corev1.PodSpec, error) { agentVolumeMounts = append(agentVolumeMounts, cvm) } volumes, agentVolumeMounts = addRemoteWriteAssetsToVolumes(volumes, agentVolumeMounts, cr) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlcluster/vlinsert.go b/internal/controller/operator/factory/vlcluster/vlinsert.go index fe024cd78..568b452f4 100644 --- a/internal/controller/operator/factory/vlcluster/vlinsert.go +++ b/internal/controller/operator/factory/vlcluster/vlinsert.go @@ -206,7 +206,7 @@ func buildVLInsertPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLInsert.ExtraArgs, cr.Spec.VLInsert.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLInsert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vlcluster/vlselect.go b/internal/controller/operator/factory/vlcluster/vlselect.go index 4f22715dd..65560f54a 100644 --- a/internal/controller/operator/factory/vlcluster/vlselect.go +++ b/internal/controller/operator/factory/vlcluster/vlselect.go @@ -307,7 +307,7 @@ func buildVLSelectPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLSelect.ExtraArgs, cr.Spec.VLSelect.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLSelect.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vlstorage.go b/internal/controller/operator/factory/vlcluster/vlstorage.go index b450e9b2c..02a59f1f8 100644 --- a/internal/controller/operator/factory/vlcluster/vlstorage.go +++ b/internal/controller/operator/factory/vlcluster/vlstorage.go @@ -309,7 +309,7 @@ func buildVLStoragePodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VLStorage.ExtraArgs, cr.Spec.VLStorage.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VLStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vlcluster/vmauth_lb.go b/internal/controller/operator/factory/vlcluster/vmauth_lb.go index 8a2768823..4ff7ca676 100644 --- a/internal/controller/operator/factory/vlcluster/vmauth_lb.go +++ b/internal/controller/operator/factory/vlcluster/vmauth_lb.go @@ -161,7 +161,7 @@ func buildVMauthLBDeployment(cr *vmv1.VLCluster) (*appsv1.Deployment, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vlsingle/vlsingle.go b/internal/controller/operator/factory/vlsingle/vlsingle.go index 2326675d3..497778c14 100644 --- a/internal/controller/operator/factory/vlsingle/vlsingle.go +++ b/internal/controller/operator/factory/vlsingle/vlsingle.go @@ -235,7 +235,7 @@ func makePodSpec(r *vmv1.VLSingle) (*corev1.PodTemplateSpec, error) { volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, r.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, r.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds, r.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vlsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vmagent/vmagent.go b/internal/controller/operator/factory/vmagent/vmagent.go index 1c9ba0329..6a6d9c1ac 100644 --- a/internal/controller/operator/factory/vmagent/vmagent.go +++ b/internal/controller/operator/factory/vmagent/vmagent.go @@ -656,7 +656,7 @@ func newPodSpec(cr *vmv1beta1.VMAgent, ac *build.AssetsCache) (*corev1.PodSpec, args = build.StreamAggrArgsTo(args, "streamAggr", streamAggrKeys, streamAggrConfigs...) args = build.AppendArgsForInsertPorts(args, cr.Spec.InsertPorts) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmalert/vmalert.go b/internal/controller/operator/factory/vmalert/vmalert.go index 7a9515f23..28e665a94 100644 --- a/internal/controller/operator/factory/vmalert/vmalert.go +++ b/internal/controller/operator/factory/vmalert/vmalert.go @@ -522,7 +522,7 @@ func buildArgs(cr *vmv1beta1.VMAlert, ruleConfigMapNames []string, ac *build.Ass } args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmauth/vmauth.go b/internal/controller/operator/factory/vmauth/vmauth.go index 938043165..3a1efcbb6 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -326,7 +326,7 @@ func makeSpecForVMAuth(cr *vmv1beta1.VMAuth) (*corev1.PodTemplateSpec, error) { return nil, fmt.Errorf("cannot apply patch for initContainers: %w", err) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vmcluster/vmcluster.go b/internal/controller/operator/factory/vmcluster/vmcluster.go index e8d68aa89..0b107f8bd 100644 --- a/internal/controller/operator/factory/vmcluster/vmcluster.go +++ b/internal/controller/operator/factory/vmcluster/vmcluster.go @@ -657,7 +657,7 @@ func makePodSpecForVMSelect(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMSelect.ExtraArgs, cr.Spec.VMSelect.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMSelect.ExtraArgs, "-") sort.Strings(args) vmselectContainer := corev1.Container{ @@ -862,7 +862,7 @@ func makePodSpecForVMInsert(cr *vmv1beta1.VMCluster) (*corev1.PodTemplateSpec, e volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMInsert.ExtraArgs, cr.Spec.VMInsert.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMInsert.ExtraArgs, "-") sort.Strings(args) @@ -1083,7 +1083,7 @@ func makePodSpecForVMStorage(ctx context.Context, cr *vmv1beta1.VMCluster) (*cor volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.VMStorage.ExtraArgs, cr.Spec.VMStorage.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ @@ -1511,7 +1511,7 @@ func buildVMAuthLBDeployment(cr *vmv1beta1.VMCluster) (*appsv1.Deployment, error volumes, vmounts = build.LicenseVolumeTo(volumes, vmounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, spec.ExtraArgs, spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, spec.ExtraArgs, "-") sort.Strings(args) vmauthLBCnt := corev1.Container{ diff --git a/internal/controller/operator/factory/vmsingle/vmsingle.go b/internal/controller/operator/factory/vmsingle/vmsingle.go index fc1e20dbb..86f67441f 100644 --- a/internal/controller/operator/factory/vmsingle/vmsingle.go +++ b/internal/controller/operator/factory/vmsingle/vmsingle.go @@ -329,7 +329,7 @@ func newPodSpec(ctx context.Context, cr *vmv1beta1.VMSingle) (*corev1.PodTemplat volumes, vmMounts = build.LicenseVolumeTo(volumes, vmMounts, cr.Spec.License, vmv1beta1.SecretsDir) args = build.LicenseArgsTo(args, cr.Spec.License, vmv1beta1.SecretsDir) - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.ExtraArgs, cr.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) vmsingleContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/insert.go b/internal/controller/operator/factory/vtcluster/insert.go index 0b82293c5..9e0f88bb4 100644 --- a/internal/controller/operator/factory/vtcluster/insert.go +++ b/internal/controller/operator/factory/vtcluster/insert.go @@ -196,7 +196,7 @@ func buildVTInsertPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Insert.ExtraArgs, cr.Spec.Insert.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Insert.ExtraArgs, "-") sort.Strings(args) diff --git a/internal/controller/operator/factory/vtcluster/select.go b/internal/controller/operator/factory/vtcluster/select.go index 465c9da05..b22018a3e 100644 --- a/internal/controller/operator/factory/vtcluster/select.go +++ b/internal/controller/operator/factory/vtcluster/select.go @@ -303,7 +303,7 @@ func buildVTSelectPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Select.ExtraArgs, cr.Spec.Select.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Select.ExtraArgs, "-") sort.Strings(args) selectContainers := corev1.Container{ diff --git a/internal/controller/operator/factory/vtcluster/storage.go b/internal/controller/operator/factory/vtcluster/storage.go index 7ea265894..17331b786 100644 --- a/internal/controller/operator/factory/vtcluster/storage.go +++ b/internal/controller/operator/factory/vtcluster/storage.go @@ -303,7 +303,7 @@ func buildVTStoragePodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) }) } - args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.TerminationGracePeriodSeconds, cr.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, cr.Spec.Storage.ExtraArgs, cr.Spec.Storage.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.Storage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ diff --git a/internal/controller/operator/factory/vtsingle/vtsingle.go b/internal/controller/operator/factory/vtsingle/vtsingle.go index 83f650581..35d0ebdee 100644 --- a/internal/controller/operator/factory/vtsingle/vtsingle.go +++ b/internal/controller/operator/factory/vtsingle/vtsingle.go @@ -226,7 +226,7 @@ func makePodSpec(r *vmv1.VTSingle) (*corev1.PodTemplateSpec, error) { }) } - args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds, r.Status.LastAppliedSpec == nil) + args = build.AddHTTPShutdownDelayArg(args, r.Spec.ExtraArgs, r.Spec.TerminationGracePeriodSeconds) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vtsingleContainer := corev1.Container{ From 7de933ca64408b3d397ec6a1a380599404009d45 Mon Sep 17 00:00:00 2001 From: Andrii Chubatiuk Date: Sun, 1 Mar 2026 09:37:26 +0200 Subject: [PATCH 10/10] make lint-fix --- internal/controller/operator/factory/build/container_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index f41629a0c..7eec66f9b 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -226,7 +226,7 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { terminationGracePeriodSeconds: nil, wantArgs: []string{"-http.shutdownDelay=30s"}, }) - //if extraArg already exists, no more args should be added, it will be added later in the process of adding extra args + // if extraArg already exists, no more args should be added, it will be added later in the process of adding extra args f(opts{ extraArgs: map[string]string{"http.shutdownDelay": "5s"}, terminationGracePeriodSeconds: nil,