From de6ae6b685b02a8acb987c6ad39a64df8eb73dd0 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 1/5] 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 582e53145..081a37c3a 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -192,6 +192,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 9a1a9cfa4..92e0fdc98 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -200,6 +200,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 9a9a7b209..431d916fe 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -334,6 +334,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 902ee5b86..f85722f61 100644 --- a/internal/controller/operator/factory/vmauth/vmauth_test.go +++ b/internal/controller/operator/factory/vmauth/vmauth_test.go @@ -644,6 +644,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml + - -http.shutdownDelay=30s - -httpListenAddr=:8429 ports: - name: http @@ -758,6 +759,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml + - -http.shutdownDelay=30s - -httpListenAddr=:8429 ports: - name: http From fec42e74093070b18dd89c8e88f6faeb63158898 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 2/5] change default shutdownDelay to match build.Probe, added it to VMAgent, VMAlert, VMSingle --- .../operator/factory/build/container.go | 17 ++++++++++------- .../operator/factory/build/container_test.go | 14 ++++++++------ .../operator/factory/vmagent/vmagent.go | 1 + .../operator/factory/vmagent/vmagent_test.go | 6 ++++++ .../operator/factory/vmalert/vmalert.go | 1 + .../operator/factory/vmalert/vmalert_test.go | 5 +++-- .../operator/factory/vmauth/vmauth.go | 2 +- .../operator/factory/vmauth/vmauth_test.go | 4 ++-- .../operator/factory/vmsingle/vmsingle.go | 1 + 9 files changed, 33 insertions(+), 18 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index 081a37c3a..ae8c20b87 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -193,24 +193,27 @@ 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. // 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 { +func AddHTTPShutdownDelayArg(args []string, params *vmv1beta1.CommonAppsParams, dashes string) []string { + if params == nil { + return args + } + if _, ok := params.ExtraArgs["http.shutdownDelay"]; ok { return args } delaySeconds := defaultReadinessPeriodSeconds * defaultReadinessFailureThreshold - if probes != nil && probes.ReadinessProbe != nil { - periodSeconds := probes.ReadinessProbe.PeriodSeconds + if params.ReadinessProbe != nil { + periodSeconds := params.ReadinessProbe.PeriodSeconds if periodSeconds == 0 { periodSeconds = defaultReadinessPeriodSeconds } - failureThreshold := probes.ReadinessProbe.FailureThreshold + failureThreshold := params.ReadinessProbe.FailureThreshold if failureThreshold == 0 { failureThreshold = defaultReadinessFailureThreshold } diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index 92e0fdc98..c0b2d4d4f 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -202,24 +202,26 @@ 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, &vmv1beta1.CommonAppsParams{}, "-") + 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, "-") + params := vmv1beta1.CommonAppsParams{ + ExtraArgs: map[string]string{"http.shutdownDelay": "5s"}, + } + got := AddHTTPShutdownDelayArg(nil, ¶ms, "-") assert.Nil(t, got) }) t.Run("derives value from custom readiness probe", func(t *testing.T) { - probes := &vmv1beta1.EmbeddedProbes{ + params := vmv1beta1.CommonAppsParams{ ReadinessProbe: &corev1.Probe{ PeriodSeconds: 3, FailureThreshold: 4, }, } - got := AddHTTPShutdownDelayArg(nil, nil, probes, "-") + got := AddHTTPShutdownDelayArg(nil, ¶ms, "-") assert.Equal(t, []string{"-http.shutdownDelay=12s"}, got) }) } diff --git a/internal/controller/operator/factory/vmagent/vmagent.go b/internal/controller/operator/factory/vmagent/vmagent.go index 7469fcad2..2f9f3d8d8 100644 --- a/internal/controller/operator/factory/vmagent/vmagent.go +++ b/internal/controller/operator/factory/vmagent/vmagent.go @@ -666,6 +666,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.CommonAppsParams, "-") 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 213bab407..5b7060127 100644 --- a/internal/controller/operator/factory/vmagent/vmagent_test.go +++ b/internal/controller/operator/factory/vmagent/vmagent_test.go @@ -2397,6 +2397,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 @@ -2501,6 +2502,7 @@ containers: - name: vmagent image: vm-repo:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:8425 - -remoteWrite.maxDiskUsagePerURL=1073741824 - -remoteWrite.tlsInsecureSkipVerify=true @@ -2651,6 +2653,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 @@ -2782,6 +2785,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 @@ -2868,6 +2872,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 @@ -2959,6 +2964,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 e14e8acab..786501239 100644 --- a/internal/controller/operator/factory/vmalert/vmalert.go +++ b/internal/controller/operator/factory/vmalert/vmalert.go @@ -523,6 +523,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.CommonAppsParams, "-") 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 f1bd64e46..ff4b87a9d 100644 --- a/internal/controller/operator/factory/vmalert/vmalert_test.go +++ b/internal/controller/operator/factory/vmalert/vmalert_test.go @@ -715,7 +715,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, }, ruleConfigMapNames: []string{"first-rule-cm.yaml"}, - want: []string{"-datasource.url=http://vmsingle-url", "-httpListenAddr=:8080", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, + want: []string{"-datasource.url=http://vmsingle-url", "-http.shutdownDelay=50s", "-httpListenAddr=:8080", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, }) // with tls args @@ -745,7 +745,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=:8080", "-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=:8080", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, }) // with static and selector notifiers @@ -819,6 +819,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, want: []string{ "-datasource.url=http://some-vm-datasource", + "-http.shutdownDelay=50s", "-httpListenAddr=:8080", "-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 431d916fe..26a162db9 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -334,7 +334,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.CommonAppsParams, "-") 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 f85722f61..d635d7494 100644 --- a/internal/controller/operator/factory/vmauth/vmauth_test.go +++ b/internal/controller/operator/factory/vmauth/vmauth_test.go @@ -644,7 +644,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml - - -http.shutdownDelay=30s + - -http.shutdownDelay=50s - -httpListenAddr=:8429 ports: - name: http @@ -759,7 +759,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/vmsingle/vmsingle.go b/internal/controller/operator/factory/vmsingle/vmsingle.go index fc9107a05..319e92d2a 100644 --- a/internal/controller/operator/factory/vmsingle/vmsingle.go +++ b/internal/controller/operator/factory/vmsingle/vmsingle.go @@ -336,6 +336,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.CommonAppsParams, "-") args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.ExtraArgs, "-") sort.Strings(args) vmsingleContainer := corev1.Container{ From eb7b5e015e851332aede9784e9e5e0eba868ef22 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 3/5] refactor AddHTTPShutdownArg, add shutdownDelay to other components --- .../operator/factory/build/container.go | 6 +- .../operator/factory/build/container_test.go | 6 +- .../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/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 | 1 + 20 files changed, 97 insertions(+), 19 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index ae8c20b87..bcb59d04f 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -197,9 +197,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, params *vmv1beta1.CommonAppsParams, dashes string) []string { +func AddHTTPShutdownDelayArg(args []string, params *vmv1beta1.CommonAppsParams) []string { if params == nil { return args } @@ -220,7 +220,7 @@ func AddHTTPShutdownDelayArg(args []string, params *vmv1beta1.CommonAppsParams, 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 c0b2d4d4f..f06210e02 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -202,7 +202,7 @@ 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, &vmv1beta1.CommonAppsParams{}, "-") + got := AddHTTPShutdownDelayArg(nil, &vmv1beta1.CommonAppsParams{}) assert.Equal(t, []string{"-http.shutdownDelay=50s"}, got) }) @@ -210,7 +210,7 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { params := vmv1beta1.CommonAppsParams{ ExtraArgs: map[string]string{"http.shutdownDelay": "5s"}, } - got := AddHTTPShutdownDelayArg(nil, ¶ms, "-") + got := AddHTTPShutdownDelayArg(nil, ¶ms) assert.Nil(t, got) }) @@ -221,7 +221,7 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { FailureThreshold: 4, }, } - got := AddHTTPShutdownDelayArg(nil, ¶ms, "-") + got := AddHTTPShutdownDelayArg(nil, ¶ms) 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 4bbdd2c5b..f88e10beb 100644 --- a/internal/controller/operator/factory/vlagent/vlagent.go +++ b/internal/controller/operator/factory/vlagent/vlagent.go @@ -427,6 +427,7 @@ func newPodSpec(cr *vmv1.VLAgent) (*corev1.PodSpec, error) { vmMounts = append(vmMounts, cvm) } volumes, vmMounts = addRemoteWriteAssetsToVolumes(volumes, vmMounts, cr) + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.CommonAppsParams) 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 b917b210f..b9d401ca0 100644 --- a/internal/controller/operator/factory/vlagent/vlagent_test.go +++ b/internal/controller/operator/factory/vlagent/vlagent_test.go @@ -850,6 +850,7 @@ containers: - name: vlagent image: vm-repo:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9425 - -tmpDataPath=/vlagent-data ports: @@ -914,6 +915,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9429 - -tmpDataPath=/vlagent-data ports: @@ -980,6 +982,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 @@ -1053,6 +1056,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.50.0 args: + - -http.shutdownDelay=50s - -httpListenAddr=:9425 - -kubernetesCollector - -kubernetesCollector.includePodLabels @@ -1147,6 +1151,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 @@ -1221,6 +1226,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 @@ -1257,8 +1263,65 @@ containers: terminationmessagepolicy: FallbackToLogsOnError imagepullpolicy: IfNotPresent 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{ + CommonAppsParams: vmv1beta1.CommonAppsParams{ + Image: vmv1beta1.Image{ + Tag: "v1.97.1", + }, + UseDefaultResources: ptr.To(false), + Port: "9429", + 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 +`) } func TestCreateOrUpdate_Paused(t *testing.T) { diff --git a/internal/controller/operator/factory/vlcluster/vlcluster_test.go b/internal/controller/operator/factory/vlcluster/vlcluster_test.go index b6cda97a4..92570bbe2 100644 --- a/internal/controller/operator/factory/vlcluster/vlcluster_test.go +++ b/internal/controller/operator/factory/vlcluster/vlcluster_test.go @@ -106,7 +106,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vlinsert", @@ -120,7 +120,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vlselect", @@ -135,7 +135,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vlstorage", @@ -198,7 +198,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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"}) }, }) @@ -235,6 +235,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 d8cf0497c..ea61de227 100644 --- a/internal/controller/operator/factory/vlcluster/vlinsert.go +++ b/internal/controller/operator/factory/vlcluster/vlinsert.go @@ -212,6 +212,7 @@ func buildVLInsertPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.VLInsert.CommonAppsParams) 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 9f0e05ba4..316655f3b 100644 --- a/internal/controller/operator/factory/vlcluster/vlselect.go +++ b/internal/controller/operator/factory/vlcluster/vlselect.go @@ -318,6 +318,7 @@ func buildVLSelectPodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.VLSelect.CommonAppsParams) 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 fd552f958..3baa42144 100644 --- a/internal/controller/operator/factory/vlcluster/vlstorage.go +++ b/internal/controller/operator/factory/vlcluster/vlstorage.go @@ -314,6 +314,7 @@ func buildVLStoragePodSpec(cr *vmv1.VLCluster) (*corev1.PodTemplateSpec, error) }) } + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.VLStorage.CommonAppsParams) 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 fd0e53629..c939be732 100644 --- a/internal/controller/operator/factory/vlcluster/vmauth_lb.go +++ b/internal/controller/operator/factory/vlcluster/vmauth_lb.go @@ -193,6 +193,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.CommonAppsParams) 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 cce5b434e..75f2107a0 100644 --- a/internal/controller/operator/factory/vlsingle/vlsingle.go +++ b/internal/controller/operator/factory/vlsingle/vlsingle.go @@ -242,6 +242,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.CommonAppsParams) 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 2f9f3d8d8..849ac5547 100644 --- a/internal/controller/operator/factory/vmagent/vmagent.go +++ b/internal/controller/operator/factory/vmagent/vmagent.go @@ -666,7 +666,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.CommonAppsParams, "-") + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.CommonAppsParams) 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 786501239..443575606 100644 --- a/internal/controller/operator/factory/vmalert/vmalert.go +++ b/internal/controller/operator/factory/vmalert/vmalert.go @@ -523,7 +523,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.CommonAppsParams, "-") + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.CommonAppsParams) 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 26a162db9..5f5bb1b90 100644 --- a/internal/controller/operator/factory/vmauth/vmauth.go +++ b/internal/controller/operator/factory/vmauth/vmauth.go @@ -334,7 +334,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.CommonAppsParams, "-") + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.CommonAppsParams) 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 5fe9986cf..999b21672 100644 --- a/internal/controller/operator/factory/vmcluster/vmcluster.go +++ b/internal/controller/operator/factory/vmcluster/vmcluster.go @@ -677,6 +677,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.CommonAppsParams) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMSelect.ExtraArgs, "-") sort.Strings(args) vmselectContainer := corev1.Container{ @@ -879,6 +880,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.CommonAppsParams) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMInsert.ExtraArgs, "-") sort.Strings(args) @@ -1101,6 +1103,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.CommonAppsParams) args = build.AddExtraArgsOverrideDefaults(args, cr.Spec.VMStorage.ExtraArgs, "-") sort.Strings(args) vmstorageContainer := corev1.Container{ @@ -1529,6 +1532,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.CommonAppsParams) 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 319e92d2a..0a3f79f5c 100644 --- a/internal/controller/operator/factory/vmsingle/vmsingle.go +++ b/internal/controller/operator/factory/vmsingle/vmsingle.go @@ -336,7 +336,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.CommonAppsParams, "-") + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.CommonAppsParams) 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 3d700190b..e107bae67 100644 --- a/internal/controller/operator/factory/vtcluster/cluster_test.go +++ b/internal/controller/operator/factory/vtcluster/cluster_test.go @@ -106,7 +106,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vtinsert", @@ -120,7 +120,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vtselect", @@ -135,7 +135,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vtstorage", @@ -198,7 +198,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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 faf951a3a..cd6c40490 100644 --- a/internal/controller/operator/factory/vtcluster/insert.go +++ b/internal/controller/operator/factory/vtcluster/insert.go @@ -201,6 +201,7 @@ func buildVTInsertPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.Insert.CommonAppsParams) 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 ad47b67a6..13eb38ba6 100644 --- a/internal/controller/operator/factory/vtcluster/select.go +++ b/internal/controller/operator/factory/vtcluster/select.go @@ -314,6 +314,7 @@ func buildVTSelectPodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.Select.CommonAppsParams) 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 af5e1b246..02fcd6850 100644 --- a/internal/controller/operator/factory/vtcluster/storage.go +++ b/internal/controller/operator/factory/vtcluster/storage.go @@ -308,6 +308,7 @@ func buildVTStoragePodSpec(cr *vmv1.VTCluster) (*corev1.PodTemplateSpec, error) }) } + args = build.AddHTTPShutdownDelayArg(args, &cr.Spec.Storage.CommonAppsParams) 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 8105516dc..95f20ba04 100644 --- a/internal/controller/operator/factory/vtsingle/vtsingle.go +++ b/internal/controller/operator/factory/vtsingle/vtsingle.go @@ -233,6 +233,7 @@ func makePodSpec(r *vmv1.VTSingle) (*corev1.PodTemplateSpec, error) { }) } + args = build.AddHTTPShutdownDelayArg(args, &r.Spec.CommonAppsParams) args = build.AddExtraArgsOverrideDefaults(args, r.Spec.ExtraArgs, "-") sort.Strings(args) vtsingleContainer := corev1.Container{ From 52bdf6b0e2e6619b2d1f0c9a6dea7196266a8c89 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 4/5] refactor test --- .../operator/factory/build/container_test.go | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/internal/controller/operator/factory/build/container_test.go b/internal/controller/operator/factory/build/container_test.go index f06210e02..c0b7eb140 100644 --- a/internal/controller/operator/factory/build/container_test.go +++ b/internal/controller/operator/factory/build/container_test.go @@ -201,28 +201,35 @@ 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, &vmv1beta1.CommonAppsParams{}) - assert.Equal(t, []string{"-http.shutdownDelay=50s"}, got) + type opts struct { + params vmv1beta1.CommonAppsParams + wantArgs []string + } + f := func(o opts) { + t.Helper() + assert.Equal( + t, + AddHTTPShutdownDelayArg(nil, &o.params), + o.wantArgs, + ) + } + f(opts{ + wantArgs: []string{"-http.shutdownDelay=50s"}, }) - - t.Run("does not override user extraArgs", func(t *testing.T) { - params := vmv1beta1.CommonAppsParams{ + f(opts{ + params: vmv1beta1.CommonAppsParams{ ExtraArgs: map[string]string{"http.shutdownDelay": "5s"}, - } - got := AddHTTPShutdownDelayArg(nil, ¶ms) - assert.Nil(t, got) + }, + wantArgs: nil, }) - - t.Run("derives value from custom readiness probe", func(t *testing.T) { - params := vmv1beta1.CommonAppsParams{ + f(opts{ + params: vmv1beta1.CommonAppsParams{ ReadinessProbe: &corev1.Probe{ PeriodSeconds: 3, FailureThreshold: 4, }, - } - got := AddHTTPShutdownDelayArg(nil, ¶ms) - assert.Equal(t, []string{"-http.shutdownDelay=12s"}, got) + }, + wantArgs: []string{"-http.shutdownDelay=12s"}, }) } From cd01ec5dfec1c38f56b64fc9c904f6281a08a950 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 5/5] 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 | 22 +---- .../operator/factory/build/container_test.go | 28 ++++--- .../operator/factory/vlagent/vlagent_test.go | 81 +++++++++++++++---- .../factory/vlcluster/vlcluster_test.go | 10 +-- .../operator/factory/vmagent/vmagent_test.go | 12 +-- .../operator/factory/vmalert/vmalert_test.go | 6 +- .../operator/factory/vmauth/vmauth_test.go | 4 +- .../factory/vtcluster/cluster_test.go | 8 +- 8 files changed, 105 insertions(+), 66 deletions(-) diff --git a/internal/controller/operator/factory/build/container.go b/internal/controller/operator/factory/build/container.go index bcb59d04f..e9bbdea0e 100644 --- a/internal/controller/operator/factory/build/container.go +++ b/internal/controller/operator/factory/build/container.go @@ -192,13 +192,7 @@ func AddExtraArgsOverrideDefaults(args []string, extraArgs map[string]string, da return args } -const ( - defaultReadinessPeriodSeconds int32 = 5 - defaultReadinessFailureThreshold int32 = 10 -) - // 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, params *vmv1beta1.CommonAppsParams) []string { if params == nil { return args @@ -206,20 +200,10 @@ func AddHTTPShutdownDelayArg(args []string, params *vmv1beta1.CommonAppsParams) if _, ok := params.ExtraArgs["http.shutdownDelay"]; ok { return args } - - delaySeconds := defaultReadinessPeriodSeconds * defaultReadinessFailureThreshold - if params.ReadinessProbe != nil { - periodSeconds := params.ReadinessProbe.PeriodSeconds - if periodSeconds == 0 { - periodSeconds = defaultReadinessPeriodSeconds - } - failureThreshold := params.ReadinessProbe.FailureThreshold - if failureThreshold == 0 { - failureThreshold = defaultReadinessFailureThreshold - } - delaySeconds = periodSeconds * failureThreshold + delaySeconds := int64(30) + if params.TerminationGracePeriodSeconds != nil { + delaySeconds = *params.TerminationGracePeriodSeconds } - 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 c0b7eb140..9eb87439c 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,14 +208,10 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { } f := func(o opts) { t.Helper() - assert.Equal( - t, - AddHTTPShutdownDelayArg(nil, &o.params), - o.wantArgs, - ) + assert.Equal(t, AddHTTPShutdownDelayArg(nil, &o.params), o.wantArgs) } f(opts{ - wantArgs: []string{"-http.shutdownDelay=50s"}, + wantArgs: []string{"-http.shutdownDelay=30s"}, }) f(opts{ params: vmv1beta1.CommonAppsParams{ @@ -224,12 +221,21 @@ func TestAddHTTPShutdownDelayArg(t *testing.T) { }) f(opts{ params: vmv1beta1.CommonAppsParams{ - ReadinessProbe: &corev1.Probe{ - PeriodSeconds: 3, - FailureThreshold: 4, - }, + TerminationGracePeriodSeconds: ptr.To[int64](60), + }, + wantArgs: []string{"-http.shutdownDelay=60s"}, + }) + f(opts{ + params: vmv1beta1.CommonAppsParams{ + TerminationGracePeriodSeconds: ptr.To[int64](120), + }, + wantArgs: []string{"-http.shutdownDelay=120s"}, + }) + f(opts{ + params: vmv1beta1.CommonAppsParams{ + ExtraArgs: map[string]string{"http.shutdownDelay": "20s"}, + TerminationGracePeriodSeconds: ptr.To[int64](120), }, - wantArgs: []string{"-http.shutdownDelay=12s"}, }) } diff --git a/internal/controller/operator/factory/vlagent/vlagent_test.go b/internal/controller/operator/factory/vlagent/vlagent_test.go index b9d401ca0..f9dd5308a 100644 --- a/internal/controller/operator/factory/vlagent/vlagent_test.go +++ b/internal/controller/operator/factory/vlagent/vlagent_test.go @@ -369,6 +369,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"}, + }, + CommonAppsParams: vmv1beta1.CommonAppsParams{ + 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"}, + }, + CommonAppsParams: vmv1beta1.CommonAppsParams{ + 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) { @@ -850,7 +902,7 @@ containers: - name: vlagent image: vm-repo:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9425 - -tmpDataPath=/vlagent-data ports: @@ -915,7 +967,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9429 - -tmpDataPath=/vlagent-data ports: @@ -982,7 +1034,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 @@ -1056,7 +1108,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.50.0 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:9425 - -kubernetesCollector - -kubernetesCollector.includePodLabels @@ -1151,7 +1203,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 @@ -1226,7 +1278,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 @@ -1265,7 +1317,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{ @@ -1273,12 +1325,9 @@ serviceaccountname: vlagent-agent Image: vmv1beta1.Image{ Tag: "v1.97.1", }, - UseDefaultResources: ptr.To(false), - Port: "9429", - ReadinessProbe: &corev1.Probe{ - PeriodSeconds: 4, - FailureThreshold: 6, - }, + UseDefaultResources: ptr.To(false), + Port: "9429", + TerminationGracePeriodSeconds: ptr.To[int64](40), }, }, }, []runtime.Object{}, ` @@ -1286,7 +1335,7 @@ containers: - name: vlagent image: victoriametrics/vlagent:v1.97.1 args: - - -http.shutdownDelay=24s + - -http.shutdownDelay=40s - -httpListenAddr=:9429 - -tmpDataPath=/vlagent-data ports: @@ -1315,9 +1364,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 92570bbe2..a238ae61c 100644 --- a/internal/controller/operator/factory/vlcluster/vlcluster_test.go +++ b/internal/controller/operator/factory/vlcluster/vlcluster_test.go @@ -106,7 +106,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vlinsert", @@ -120,7 +120,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vlselect", @@ -135,7 +135,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vlstorage", @@ -198,7 +198,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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"}) }, }) @@ -235,7 +235,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/vmagent/vmagent_test.go b/internal/controller/operator/factory/vmagent/vmagent_test.go index 5b7060127..e38b57f4b 100644 --- a/internal/controller/operator/factory/vmagent/vmagent_test.go +++ b/internal/controller/operator/factory/vmagent/vmagent_test.go @@ -2397,7 +2397,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 @@ -2502,7 +2502,7 @@ containers: - name: vmagent image: vm-repo:v1.97.1 args: - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8425 - -remoteWrite.maxDiskUsagePerURL=1073741824 - -remoteWrite.tlsInsecureSkipVerify=true @@ -2653,7 +2653,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 @@ -2785,7 +2785,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 @@ -2872,7 +2872,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 @@ -2964,7 +2964,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_test.go b/internal/controller/operator/factory/vmalert/vmalert_test.go index ff4b87a9d..1fb399f01 100644 --- a/internal/controller/operator/factory/vmalert/vmalert_test.go +++ b/internal/controller/operator/factory/vmalert/vmalert_test.go @@ -715,7 +715,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, }, ruleConfigMapNames: []string{"first-rule-cm.yaml"}, - want: []string{"-datasource.url=http://vmsingle-url", "-http.shutdownDelay=50s", "-httpListenAddr=:8080", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, + want: []string{"-datasource.url=http://vmsingle-url", "-http.shutdownDelay=30s", "-httpListenAddr=:8080", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, }) // with tls args @@ -745,7 +745,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=:8080", "-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=:8080", "-notifier.url=http://test", "-rule=\"/etc/vmalert/config/first-rule-cm.yaml/*.yaml\""}, }) // with static and selector notifiers @@ -819,7 +819,7 @@ func Test_buildVMAlertArgs(t *testing.T) { }, want: []string{ "-datasource.url=http://some-vm-datasource", - "-http.shutdownDelay=50s", + "-http.shutdownDelay=30s", "-httpListenAddr=:8080", "-notifier.tlsCAFile=,/tmp/ca.cert,,,", "-notifier.tlsCertFile=,/tmp/cert.pem,,,", diff --git a/internal/controller/operator/factory/vmauth/vmauth_test.go b/internal/controller/operator/factory/vmauth/vmauth_test.go index d635d7494..f85722f61 100644 --- a/internal/controller/operator/factory/vmauth/vmauth_test.go +++ b/internal/controller/operator/factory/vmauth/vmauth_test.go @@ -644,7 +644,7 @@ containers: imagepullpolicy: IfNotPresent args: - -auth.config=/opt/vmauth/config.yaml - - -http.shutdownDelay=50s + - -http.shutdownDelay=30s - -httpListenAddr=:8429 ports: - name: http @@ -759,7 +759,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/vtcluster/cluster_test.go b/internal/controller/operator/factory/vtcluster/cluster_test.go index e107bae67..a0ec6c8f6 100644 --- a/internal/controller/operator/factory/vtcluster/cluster_test.go +++ b/internal/controller/operator/factory/vtcluster/cluster_test.go @@ -106,7 +106,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vtinsert", @@ -120,7 +120,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vtselect", @@ -135,7 +135,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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, map[string]string{ "app.kubernetes.io/name": "vtstorage", @@ -198,7 +198,7 @@ func TestCreateOrUpdate(t *testing.T) { assert.NoError(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"}) }, })