Change:
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite} Happened on a presubmit run in . Previous issues for this test:
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite} Happened on a presubmit run in .
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}
https://k8s- Failed: [] Job should fail a job {Kubernetes e2e suite}

Discussion:
// the job stabilized and won't be synced until modification or full // resync happens, we don't want to wait for the latter so we force // sync modifying it <del> job.Spec.Parallelism = &completions job, err = updateV1Job(f.ClientSet, f.Namespace.Name, job) </del> <ins> _, err = framework.UpdateJobWithRetries(f.ClientSet, f.Namespace.Name, job.Name, func(update *batch.Job) { update.Spec.Parallelism = &completions }) </ins> Expect(err).NotTo(HaveOccurred()) err = waitForV1JobFail(f.ClientSet, f.Namespace.Name, job.Name, v1JobTimeout) }

"//pkg/api/validation:go_default_library", "//pkg/apimachinery/registered:go_default_library", "//pkg/apis/apps:go_default_library", <ins> "//pkg/apis/batch:go_default_library", </ins> "//pkg/apis/componentconfig:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library",

"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/apps" <ins> "k8s.io/kubernetes/pkg/apis/batch" </ins> "k8s.io/kubernetes/pkg/apis/extensions" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"

return statefulSet, pollErr } <ins> type updateJobFunc func(*batch.Job) func UpdateJobWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateJobFunc) (job *batch.Job, err error) { jobs := c.Batch().Jobs(namespace) var updateErr error pollErr := wait.PollImmediate(10*time.Millisecond, 1*time.Minute, func() (bool, error) { if job, err = jobs.Get(name); err != nil { return false, err } // Apply the update, then attempt to push it to the apiserver. applyUpdate(job) if job, err = jobs.Update(job); err == nil { Logf("Updating job %s", name) return true, nil } updateErr = err return false, nil }) if pollErr == wait.ErrWaitTimeout { pollErr = fmt.Errorf("couldn't apply the provided updated to job %q: %v", name, updateErr) } return job, pollErr } </ins> // NodeAddresses returns the first address of the given type of each node. func NodeAddresses(nodelist *api.NodeList, addrType api.NodeAddressType) []string { hosts := []string{}

// the job stabilized and won't be synced until modification or full // resync happens, we don't want to wait for the latter so we force // sync modifying it <del> job.Spec.Parallelism = &completions job, err = updateJob(f.ClientSet, f.Namespace.Name, job) </del> <ins> _, err = framework.UpdateJobWithRetries(f.ClientSet, f.Namespace.Name, job.Name, func(update *batch.Job) { update.Spec.Parallelism = &completions }) </ins> Expect(err).NotTo(HaveOccurred()) err = waitForJobFail(f.ClientSet, f.Namespace.Name, job.Name, jobTimeout) }