Retry Job update on conflict

Once JobReadyPods is enabled, the Job status might be updated at a later stage after the pods are running.

Change-Id: I4c13c9e55ab7e11b1f9428d6cf0a560a41be1c6a
This commit is contained in:
Aldo Culquicondor 2022-04-07 09:31:11 -04:00
parent 707b8b6efd
commit 77d9243623

View File

@ -141,7 +141,7 @@ var _ = SIGDescribe("Job", func() {
ginkgo.It("should delete pods when suspended", func() {
ginkgo.By("Creating a job with suspend=false")
job := e2ejob.NewTestJob("notTerminate", "suspend-false-to-true", v1.RestartPolicyNever, parallelism, completions, nil, backoffLimit)
job.Spec.Suspend = pointer.BoolPtr(false)
job.Spec.Suspend = pointer.Bool(false)
job, err := e2ejob.CreateJob(f.ClientSet, f.Namespace.Name, job)
framework.ExpectNoError(err, "failed to create job in namespace: %s", f.Namespace.Name)
@ -150,10 +150,22 @@ var _ = SIGDescribe("Job", func() {
framework.ExpectNoError(err, "failed to ensure number of pods associated with job %s is equal to parallelism count in namespace: %s", job.Name, f.Namespace.Name)
ginkgo.By("Updating the job with suspend=true")
job, err = e2ejob.GetJob(f.ClientSet, f.Namespace.Name, job.Name)
framework.ExpectNoError(err, "failed to retrieve latest job object")
job.Spec.Suspend = pointer.BoolPtr(true)
job, err = e2ejob.UpdateJob(f.ClientSet, f.Namespace.Name, job)
err = wait.PollImmediate(framework.Poll, framework.SingleCallTimeout, func() (bool, error) {
job, err = e2ejob.GetJob(f.ClientSet, f.Namespace.Name, job.Name)
if err != nil {
return false, err
}
job.Spec.Suspend = pointer.Bool(true)
updatedJob, err := e2ejob.UpdateJob(f.ClientSet, f.Namespace.Name, job)
if err == nil {
job = updatedJob
return true, nil
}
if apierrors.IsConflict(err) {
return false, nil
}
return false, err
})
framework.ExpectNoError(err, "failed to update job in namespace: %s", f.Namespace.Name)
ginkgo.By("Ensuring pods are deleted")