From 4646ccd74f6104fdf831030d2a40b1ed97404e74 Mon Sep 17 00:00:00 2001 From: Tzu-Chien Yu Date: Tue, 21 Apr 2026 19:03:44 +0000 Subject: [PATCH] cronjob: use cronjob namespace when fetching existing job --- pkg/controller/cronjob/cronjob_controllerv2.go | 2 +- .../cronjob/cronjob_controllerv2_test.go | 14 ++++++++++++++ pkg/controller/cronjob/injection.go | 18 ++++++++++-------- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/pkg/controller/cronjob/cronjob_controllerv2.go b/pkg/controller/cronjob/cronjob_controllerv2.go index 89ebd0b0989..3f768298168 100644 --- a/pkg/controller/cronjob/cronjob_controllerv2.go +++ b/pkg/controller/cronjob/cronjob_controllerv2.go @@ -618,7 +618,7 @@ func (jm *ControllerV2) syncCronJob( // but failed to update the active list in the status, in which case we should reattempt to add the job // into the active list and update the status. jobAlreadyExists = true - job, err := jm.jobControl.GetJob(jobReq.GetNamespace(), jobReq.GetName()) + job, err := jm.jobControl.GetJob(cronJob.Namespace, jobReq.GetName()) if err != nil { return nil, updateStatus, err } diff --git a/pkg/controller/cronjob/cronjob_controllerv2_test.go b/pkg/controller/cronjob/cronjob_controllerv2_test.go index c61b17b47f5..3e17b86ccdb 100644 --- a/pkg/controller/cronjob/cronjob_controllerv2_test.go +++ b/pkg/controller/cronjob/cronjob_controllerv2_test.go @@ -1938,6 +1938,13 @@ func TestControllerV2JobAlreadyExistsButNotInActiveStatus(t *testing.T) { if !reflect.DeepEqual(cronJobControl.Updates[0].Status.Active[0], *expectedActiveRef) { t.Errorf("Unexpected job reference in cronjob active list, got: %v, expected: %v", cronJobControl.Updates[0].Status.Active[0], expectedActiveRef) } + + if len(jobControl.GetJobNamespace) != 1 { + t.Fatalf("Unexpected get job count, got: %d, expected 1", len(jobControl.GetJobNamespace)) + } + if jobControl.GetJobNamespace[0] != cj.Namespace { + t.Fatalf("Unexpected job's namespace, got: %s, expected %s", jobControl.GetJobNamespace[0], cj.Namespace) + } } // TestControllerV2JobAlreadyExistsButDifferentOwnner validates that an already created job @@ -1984,4 +1991,11 @@ func TestControllerV2JobAlreadyExistsButDifferentOwner(t *testing.T) { if len(cronJobControl.Updates) != 0 { t.Fatalf("Unexpected updates to cronjob, got: %d, expected 0", len(cronJobControl.Updates)) } + + if len(jobControl.GetJobNamespace) != 1 { + t.Fatalf("Unexpected get job count, got: %d, expected 1", len(jobControl.GetJobNamespace)) + } + if jobControl.GetJobNamespace[0] != cj.Namespace { + t.Fatalf("Unexpected job's namespace, got: %s, expected %s", jobControl.GetJobNamespace[0], cj.Namespace) + } } diff --git a/pkg/controller/cronjob/injection.go b/pkg/controller/cronjob/injection.go index ee34b513223..876d3775988 100644 --- a/pkg/controller/cronjob/injection.go +++ b/pkg/controller/cronjob/injection.go @@ -111,14 +111,15 @@ func (r realJobControl) DeleteJob(namespace string, name string) error { type fakeJobControl struct { sync.Mutex - Job *batchv1.Job - Jobs []batchv1.Job - DeleteJobName []string - Err error - CreateErr error - UpdateJobName []string - PatchJobName []string - Patches [][]byte + Job *batchv1.Job + Jobs []batchv1.Job + DeleteJobName []string + Err error + CreateErr error + UpdateJobName []string + PatchJobName []string + Patches [][]byte + GetJobNamespace []string } var _ jobControlInterface = &fakeJobControl{} @@ -140,6 +141,7 @@ func (f *fakeJobControl) GetJob(namespace, name string) (*batchv1.Job, error) { if f.Err != nil { return nil, f.Err } + f.GetJobNamespace = append(f.GetJobNamespace, namespace) return f.Job, nil }