diff --git a/pkg/controller/job/controller.go b/pkg/controller/job/jobcontroller.go similarity index 99% rename from pkg/controller/job/controller.go rename to pkg/controller/job/jobcontroller.go index a310c424f1c..46156d68794 100644 --- a/pkg/controller/job/controller.go +++ b/pkg/controller/job/jobcontroller.go @@ -374,7 +374,7 @@ func (jm *JobController) syncJob(key string) error { job.Status.Conditions = append(job.Status.Conditions, newCondition(batch.JobFailed, "DeadlineExceeded", "Job was active longer than specified deadline")) jm.recorder.Event(&job, api.EventTypeNormal, "DeadlineExceeded", "Job was active longer than specified deadline") } else { - if jobNeedsSync { + if jobNeedsSync && job.DeletionTimestamp == nil { active = jm.manageJob(activePods, succeeded, &job) } completions := succeeded diff --git a/pkg/controller/job/controller_test.go b/pkg/controller/job/jobcontroller_test.go similarity index 97% rename from pkg/controller/job/controller_test.go rename to pkg/controller/job/jobcontroller_test.go index 8a27478227f..bef44dd84b0 100644 --- a/pkg/controller/job/controller_test.go +++ b/pkg/controller/job/jobcontroller_test.go @@ -107,6 +107,7 @@ func TestControllerSyncJob(t *testing.T) { // job setup parallelism int32 completions int32 + deleting bool // pod setup podControllerError error @@ -124,90 +125,95 @@ func TestControllerSyncJob(t *testing.T) { expectedComplete bool }{ "job start": { - 2, 5, + 2, 5, false, nil, 0, 0, 0, 0, 2, 0, 2, 0, 0, false, }, "WQ job start": { - 2, -1, + 2, -1, false, nil, 0, 0, 0, 0, 2, 0, 2, 0, 0, false, }, "pending pods": { - 2, 5, + 2, 5, false, nil, 2, 0, 0, 0, 0, 0, 2, 0, 0, false, }, "correct # of pods": { - 2, 5, + 2, 5, false, nil, 0, 2, 0, 0, 0, 0, 2, 0, 0, false, }, "WQ job: correct # of pods": { - 2, -1, + 2, -1, false, nil, 0, 2, 0, 0, 0, 0, 2, 0, 0, false, }, "too few active pods": { - 2, 5, + 2, 5, false, nil, 0, 1, 1, 0, 1, 0, 2, 1, 0, false, }, "too few active pods with a dynamic job": { - 2, -1, + 2, -1, false, nil, 0, 1, 0, 0, 1, 0, 2, 0, 0, false, }, "too few active pods, with controller error": { - 2, 5, + 2, 5, false, fmt.Errorf("Fake error"), 0, 1, 1, 0, 0, 0, 1, 1, 0, false, }, "too many active pods": { - 2, 5, + 2, 5, false, nil, 0, 3, 0, 0, 0, 1, 2, 0, 0, false, }, "too many active pods, with controller error": { - 2, 5, + 2, 5, false, fmt.Errorf("Fake error"), 0, 3, 0, 0, 0, 0, 3, 0, 0, false, }, "failed pod": { - 2, 5, + 2, 5, false, nil, 0, 1, 1, 1, 1, 0, 2, 1, 1, false, }, "job finish": { - 2, 5, + 2, 5, false, nil, 0, 0, 5, 0, 0, 0, 0, 5, 0, true, }, "WQ job finishing": { - 2, -1, + 2, -1, false, nil, 0, 1, 1, 0, 0, 0, 1, 1, 0, false, }, "WQ job all finished": { - 2, -1, + 2, -1, false, nil, 0, 0, 2, 0, 0, 0, 0, 2, 0, true, }, "WQ job all finished despite one failure": { - 2, -1, + 2, -1, false, nil, 0, 0, 1, 1, 0, 0, 0, 1, 1, true, }, "more active pods than completions": { - 2, 5, + 2, 5, false, nil, 0, 10, 0, 0, 0, 8, 2, 0, 0, false, }, "status change": { - 2, 5, + 2, 5, false, nil, 0, 2, 2, 0, 0, 0, 2, 2, 0, false, }, + "deleting job": { + 2, 5, true, + nil, 1, 1, 1, 0, + 0, 0, 2, 1, 0, false, + }, } for name, tc := range testCases { @@ -225,6 +231,10 @@ func TestControllerSyncJob(t *testing.T) { // job & pods setup job := newJob(tc.parallelism, tc.completions) + if tc.deleting { + now := unversioned.Now() + job.DeletionTimestamp = &now + } manager.jobStore.Store.Add(job) for _, pod := range newPodList(tc.pendingPods, api.PodPending, job) { manager.podStore.Indexer.Add(&pod)