From 297f04b74aee0c3c2bcdf50378f3c611583ce602 Mon Sep 17 00:00:00 2001 From: Sharpz7 Date: Fri, 11 Aug 2023 18:46:02 +0000 Subject: [PATCH] Added function to remove finalizers as backup --- pkg/controller/job/job_controller.go | 36 ++++++++++++++++++---------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/pkg/controller/job/job_controller.go b/pkg/controller/job/job_controller.go index 1572f95a343..d385a4de3d7 100644 --- a/pkg/controller/job/job_controller.go +++ b/pkg/controller/job/job_controller.go @@ -467,7 +467,11 @@ func (jm *Controller) updateJob(logger klog.Logger, old, cur interface{}) { } else { // Trigger immediate sync when spec is changed. jm.enqueueSyncJobImmediately(logger, curJob) + } + // if curJob is finished, remove the finalizer as a backup check. + if curJob.Status.CompletionTime != nil { + jm.backupRemovePodFinalizers(curJob) } // check if need to add a new rsync for ActiveDeadlineSeconds @@ -504,18 +508,7 @@ func (jm *Controller) deleteJob(logger klog.Logger, obj interface{}) { return } } - // Listing pods shouldn't really fail, as we are just querying the informer cache. - selector, err := metav1.LabelSelectorAsSelector(jobObj.Spec.Selector) - if err != nil { - utilruntime.HandleError(fmt.Errorf("parsing deleted job selector: %v", err)) - return - } - pods, _ := jm.podStore.Pods(jobObj.Namespace).List(selector) - for _, pod := range pods { - if metav1.IsControlledBy(pod, jobObj) && hasJobTrackingFinalizer(pod) { - jm.enqueueOrphanPod(pod) - } - } + jm.backupRemovePodFinalizers(jobObj) } // enqueueSyncJobImmediately tells the Job controller to invoke syncJob @@ -1879,3 +1872,22 @@ func onlyReplaceFailedPods(job *batch.Job) bool { } return feature.DefaultFeatureGate.Enabled(features.JobPodFailurePolicy) && job.Spec.PodFailurePolicy != nil } + +func (jm *Controller) backupRemovePodFinalizers(obj interface{}) { + jobObj, ok := obj.(*batch.Job) + + if !ok { + return + } + selector, err := metav1.LabelSelectorAsSelector(jobObj.Spec.Selector) + if err != nil { + utilruntime.HandleError(fmt.Errorf("parsing deleted job selector: %v", err)) + return + } + pods, _ := jm.podStore.Pods(jobObj.Namespace).List(selector) + for _, pod := range pods { + if metav1.IsControlledBy(pod, jobObj) && hasJobTrackingFinalizer(pod) { + jm.enqueueOrphanPod(pod) + } + } +}