From aeb35206be8bfe1ac70f879744261745e4c9f0cf Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Thu, 6 Dec 2018 17:19:51 +0100 Subject: [PATCH] Set delete propagation policy to background when removing jobs and its dependents --- pkg/controller/cronjob/injection.go | 3 ++- test/e2e/apps/cronjob.go | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pkg/controller/cronjob/injection.go b/pkg/controller/cronjob/injection.go index 7108879a8f..14831fe1f6 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 ec2b10a146..d63f046db2 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) {