From ae7467fb27bd30ac17d8bb5286daf7f0bb0e7845 Mon Sep 17 00:00:00 2001 From: xujihui1985 Date: Thu, 28 Dec 2023 20:54:25 +0800 Subject: [PATCH 1/2] fix(podlifetime): fix failed unittest 1. correct desired pod creation time --- pkg/framework/plugins/podlifetime/pod_lifetime_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/framework/plugins/podlifetime/pod_lifetime_test.go b/pkg/framework/plugins/podlifetime/pod_lifetime_test.go index 2105da456..44d2d4484 100644 --- a/pkg/framework/plugins/podlifetime/pod_lifetime_test.go +++ b/pkg/framework/plugins/podlifetime/pod_lifetime_test.go @@ -29,6 +29,7 @@ import ( "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/tools/events" utilptr "k8s.io/utils/ptr" + "sigs.k8s.io/descheduler/pkg/descheduler/evictions" podutil "sigs.k8s.io/descheduler/pkg/descheduler/pod" frameworkfake "sigs.k8s.io/descheduler/pkg/framework/fake" @@ -72,7 +73,7 @@ func TestPodLifeTime(t *testing.T) { p5.ObjectMeta.CreationTimestamp = newerPodCreationTime p6 := test.BuildTestPod("p6", 100, 0, node1.Name, nil) p6.Namespace = "dev" - p6.ObjectMeta.CreationTimestamp = metav1.NewTime(time.Now().Add(time.Second * 605)) + p6.ObjectMeta.CreationTimestamp = metav1.NewTime(time.Now().Add(-time.Second * 605)) ownerRef3 := test.GetReplicaSetOwnerRefList() p5.ObjectMeta.OwnerReferences = ownerRef3 @@ -84,7 +85,7 @@ func TestPodLifeTime(t *testing.T) { p7.ObjectMeta.CreationTimestamp = newerPodCreationTime p8 := test.BuildTestPod("p8", 100, 0, node1.Name, nil) p8.Namespace = "dev" - p8.ObjectMeta.CreationTimestamp = metav1.NewTime(time.Now().Add(time.Second * 595)) + p8.ObjectMeta.CreationTimestamp = metav1.NewTime(time.Now().Add(-time.Second * 595)) ownerRef4 := test.GetReplicaSetOwnerRefList() p5.ObjectMeta.OwnerReferences = ownerRef4 From 5092595384d1623d133ff54751ea62080b415ca8 Mon Sep 17 00:00:00 2001 From: xujihui1985 Date: Wed, 3 Jan 2024 20:13:26 +0800 Subject: [PATCH 2/2] fix: filter pod with age greater than MaxPodLifeTimeSeconds when the pod createtimestamp is greater than the current time (which is not make sense in real life, but when doing test with such case, it is possible), it will convert to a large number if we convert it to uint, and though it can pass the test, but doesn't make sense. --- pkg/framework/plugins/podlifetime/pod_lifetime.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/framework/plugins/podlifetime/pod_lifetime.go b/pkg/framework/plugins/podlifetime/pod_lifetime.go index 0285057c3..d4d6103e7 100644 --- a/pkg/framework/plugins/podlifetime/pod_lifetime.go +++ b/pkg/framework/plugins/podlifetime/pod_lifetime.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog/v2" + frameworktypes "sigs.k8s.io/descheduler/pkg/framework/types" "sigs.k8s.io/descheduler/pkg/descheduler/evictions" @@ -67,8 +68,8 @@ func New(args runtime.Object, handle frameworktypes.Handle) (frameworktypes.Plug } podFilter = podutil.WrapFilterFuncs(podFilter, func(pod *v1.Pod) bool { - podAgeSeconds := uint(metav1.Now().Sub(pod.GetCreationTimestamp().Local()).Seconds()) - return podAgeSeconds > *podLifeTimeArgs.MaxPodLifeTimeSeconds + podAgeSeconds := int(metav1.Now().Sub(pod.GetCreationTimestamp().Local()).Seconds()) + return podAgeSeconds > int(*podLifeTimeArgs.MaxPodLifeTimeSeconds) }) if len(podLifeTimeArgs.States) > 0 {