From 71ab7dc791f816ccd06d10784e6160062a080f8f Mon Sep 17 00:00:00 2001 From: Michal Wozniak Date: Mon, 5 Jun 2023 10:36:11 +0200 Subject: [PATCH] Remarks --- pkg/controller/job/backoff_utils.go | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/pkg/controller/job/backoff_utils.go b/pkg/controller/job/backoff_utils.go index 6a7b55e64e1..4a3a5e7fba8 100644 --- a/pkg/controller/job/backoff_utils.go +++ b/pkg/controller/job/backoff_utils.go @@ -23,10 +23,9 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/client-go/tools/cache" + apipod "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/utils/clock" "k8s.io/utils/pointer" - - apipod "k8s.io/kubernetes/pkg/api/v1/pod" ) type backoffRecord struct { @@ -159,17 +158,26 @@ func sortByFinishedTime(pods []*v1.Pod) { }) } +// Returns the pod finish time using the following lookups: +// 1. if all containers finished, use the latest time +// 2. if the pod has Ready=False condition, use the last transition time +// 3. if the pod has been deleted, use the `deletionTimestamp - grace_period` to estimate the moment of deletion +// 4. fallback to pod's creation time +// +// Pods owned by Kubelet are marked with Ready=False condition when +// transitioning to terminal phase, thus being handled by (1.) or (2.). +// Orphaned pods are deleted by PodGC, thus being handled by (3.). func getFinishedTime(p *v1.Pod) time.Time { - finishTime := getFinishTimeFromContainers(p) - if finishTime == nil { - finishTime = getFinishTimeFromPodReadyFalseCondition(p) - } - if finishTime == nil { - finishTime = getFinishTimeFromDeletionTimestamp(p) - } - if finishTime != nil { + if finishTime := getFinishTimeFromContainers(p); finishTime != nil { return *finishTime } + if finishTime := getFinishTimeFromPodReadyFalseCondition(p); finishTime != nil { + return *finishTime + } + if finishTime := getFinishTimeFromDeletionTimestamp(p); finishTime != nil { + return *finishTime + } + // This should not happen in clusters with Kubelet and PodGC running. return p.CreationTimestamp.Time }