check sidecar featuregate in getFinishedTime
This commit is contained in:
		| @@ -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 { | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 AxeZhan
					AxeZhan