From d97282052ef89d1946fef90368f8159f2805ece4 Mon Sep 17 00:00:00 2001 From: AxeZhan Date: Thu, 30 May 2024 10:27:42 +0800 Subject: [PATCH] check sidecar featuregate in getFinishedTime --- pkg/controller/job/backoff_utils.go | 25 ++++++++++++++---------- pkg/controller/job/backoff_utils_test.go | 4 ++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/pkg/controller/job/backoff_utils.go b/pkg/controller/job/backoff_utils.go index ea388562e72..3bef68117b8 100644 --- a/pkg/controller/job/backoff_utils.go +++ b/pkg/controller/job/backoff_utils.go @@ -23,9 +23,11 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/cache" "k8s.io/klog/v2" apipod "k8s.io/kubernetes/pkg/api/v1/pod" + "k8s.io/kubernetes/pkg/features" "k8s.io/utils/clock" "k8s.io/utils/ptr" ) @@ -185,18 +187,21 @@ func getFinishedTime(p *v1.Pod) time.Time { func getFinishTimeFromContainers(p *v1.Pod) *time.Time { finishTime := latestFinishTime(nil, p.Status.ContainerStatuses, nil) - // We need to check InitContainerStatuses here also, - // because with the sidecar (restartable init) containers, - // sidecar containers will always finish later than regular containers. - names := sets.New[string]() - for _, c := range p.Spec.InitContainers { - if c.RestartPolicy != nil && *c.RestartPolicy == v1.ContainerRestartPolicyAlways { - names.Insert(c.Name) + if utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) { + // We need to check InitContainerStatuses here also, + // because with the sidecar (restartable init) containers, + // sidecar containers will always finish later than regular containers. + names := sets.New[string]() + for _, c := range p.Spec.InitContainers { + if c.RestartPolicy != nil && *c.RestartPolicy == v1.ContainerRestartPolicyAlways { + names.Insert(c.Name) + } } + finishTime = latestFinishTime(finishTime, p.Status.InitContainerStatuses, func(status v1.ContainerStatus) bool { + return names.Has(status.Name) + }) } - return latestFinishTime(finishTime, p.Status.InitContainerStatuses, func(status v1.ContainerStatus) bool { - return names.Has(status.Name) - }) + return finishTime } func latestFinishTime(prevFinishTime *time.Time, cs []v1.ContainerStatus, check func(status v1.ContainerStatus) bool) *time.Time { diff --git a/pkg/controller/job/backoff_utils_test.go b/pkg/controller/job/backoff_utils_test.go index d686e3bc66e..677d8251cb8 100644 --- a/pkg/controller/job/backoff_utils_test.go +++ b/pkg/controller/job/backoff_utils_test.go @@ -23,7 +23,10 @@ import ( "github.com/google/go-cmp/cmp" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilfeature "k8s.io/apiserver/pkg/util/feature" + featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/klog/v2/ktesting" + "k8s.io/kubernetes/pkg/features" clocktesting "k8s.io/utils/clock/testing" "k8s.io/utils/ptr" ) @@ -200,6 +203,7 @@ func TestNewBackoffRecord(t *testing.T) { } func TestGetFinishedTime(t *testing.T) { + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SidecarContainers, true) defaultTestTime := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) defaultTestTimeMinus30s := defaultTestTime.Add(-30 * time.Second) containerRestartPolicyAlways := v1.ContainerRestartPolicyAlways