diff --git a/pkg/controller/cronjob/injection.go b/pkg/controller/cronjob/injection.go index 7108879a8f9..14831fe1f6e 100644 --- a/pkg/controller/cronjob/injection.go +++ b/pkg/controller/cronjob/injection.go @@ -118,7 +118,8 @@ func (r realJobControl) CreateJob(namespace string, job *batchv1.Job) (*batchv1. } func (r realJobControl) DeleteJob(namespace string, name string) error { - return r.KubeClient.BatchV1().Jobs(namespace).Delete(name, nil) + background := metav1.DeletePropagationBackground + return r.KubeClient.BatchV1().Jobs(namespace).Delete(name, &metav1.DeleteOptions{PropagationPolicy: &background}) } type fakeJobControl struct { diff --git a/test/e2e/apps/cronjob.go b/test/e2e/apps/cronjob.go index ec2b10a146f..d63f046db22 100644 --- a/test/e2e/apps/cronjob.go +++ b/test/e2e/apps/cronjob.go @@ -250,8 +250,10 @@ var _ = SIGDescribe("CronJob", func() { Expect(len(finishedJobs) == 1).To(BeTrue()) // Job should get deleted when the next job finishes the next minute - By("Ensuring this job does not exist anymore") - err = waitForJobNotExist(f.ClientSet, f.Namespace.Name, finishedJobs[0]) + By("Ensuring this job and its pods does not exist anymore") + err = waitForJobToDisappear(f.ClientSet, f.Namespace.Name, finishedJobs[0]) + Expect(err).NotTo(HaveOccurred()) + err = waitForJobsPodToDisappear(f.ClientSet, f.Namespace.Name, finishedJobs[0]) Expect(err).NotTo(HaveOccurred()) By("Ensuring there is 1 finished job by listing jobs explicitly") @@ -380,8 +382,8 @@ func waitForJobNotActive(c clientset.Interface, ns, cronJobName, jobName string) }) } -// Wait for a job to not exist by listing jobs explicitly. -func waitForJobNotExist(c clientset.Interface, ns string, targetJob *batchv1.Job) error { +// Wait for a job to disappear by listing them explicitly. +func waitForJobToDisappear(c clientset.Interface, ns string, targetJob *batchv1.Job) error { return wait.Poll(framework.Poll, cronJobTimeout, func() (bool, error) { jobs, err := c.BatchV1().Jobs(ns).List(metav1.ListOptions{}) if err != nil { @@ -397,6 +399,18 @@ func waitForJobNotExist(c clientset.Interface, ns string, targetJob *batchv1.Job }) } +// Wait for a pod to disappear by listing them explicitly. +func waitForJobsPodToDisappear(c clientset.Interface, ns string, targetJob *batchv1.Job) error { + return wait.Poll(framework.Poll, cronJobTimeout, func() (bool, error) { + options := metav1.ListOptions{LabelSelector: fmt.Sprintf("controller-uid=%s", targetJob.UID)} + pods, err := c.CoreV1().Pods(ns).List(options) + if err != nil { + return false, err + } + return len(pods.Items) == 0, nil + }) +} + // Wait for a job to be replaced with a new one. func waitForJobReplaced(c clientset.Interface, ns, previousJobName string) error { return wait.Poll(framework.Poll, cronJobTimeout, func() (bool, error) {