Merge pull request #10047 from lsowen/feature-10042

Fix SIGSEGV when job.Spec.Completions is nil
pull/10063/head
Matt Farina 3 years ago committed by GitHub
commit f509bc6891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -227,7 +227,7 @@ func (c *ReadyChecker) jobReady(job *batchv1.Job) bool {
c.log("Job is failed: %s/%s", job.GetNamespace(), job.GetName())
return false
}
if job.Status.Succeeded < *job.Spec.Completions {
if job.Spec.Completions != nil && job.Status.Succeeded < *job.Spec.Completions {
c.log("Job is not completed: %s/%s", job.GetNamespace(), job.GetName())
return false
}

@ -241,39 +241,44 @@ func Test_ReadyChecker_jobReady(t *testing.T) {
}{
{
name: "job is completed",
args: args{job: newJob("foo", 1, 1, 1, 0)},
args: args{job: newJob("foo", 1, intToInt32(1), 1, 0)},
want: true,
},
{
name: "job is incomplete",
args: args{job: newJob("foo", 1, 1, 0, 0)},
args: args{job: newJob("foo", 1, intToInt32(1), 0, 0)},
want: false,
},
{
name: "job is failed",
args: args{job: newJob("foo", 1, 1, 0, 1)},
args: args{job: newJob("foo", 1, intToInt32(1), 0, 1)},
want: false,
},
{
name: "job is completed with retry",
args: args{job: newJob("foo", 1, 1, 1, 1)},
args: args{job: newJob("foo", 1, intToInt32(1), 1, 1)},
want: true,
},
{
name: "job is failed with retry",
args: args{job: newJob("foo", 1, 1, 0, 2)},
args: args{job: newJob("foo", 1, intToInt32(1), 0, 2)},
want: false,
},
{
name: "job is completed single run",
args: args{job: newJob("foo", 0, 1, 1, 0)},
args: args{job: newJob("foo", 0, intToInt32(1), 1, 0)},
want: true,
},
{
name: "job is failed single run",
args: args{job: newJob("foo", 0, 1, 0, 1)},
args: args{job: newJob("foo", 0, intToInt32(1), 0, 1)},
want: false,
},
{
name: "job with null completions",
args: args{job: newJob("foo", 0, nil, 1, 0)},
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@ -481,7 +486,7 @@ func newPersistentVolumeClaim(name string, phase corev1.PersistentVolumeClaimPha
}
}
func newJob(name string, backoffLimit, completions, succeeded, failed int) *batchv1.Job {
func newJob(name string, backoffLimit int, completions *int32, succeeded int, failed int) *batchv1.Job {
return &batchv1.Job{
ObjectMeta: metav1.ObjectMeta{
Name: name,
@ -489,7 +494,7 @@ func newJob(name string, backoffLimit, completions, succeeded, failed int) *batc
},
Spec: batchv1.JobSpec{
BackoffLimit: intToInt32(backoffLimit),
Completions: intToInt32(completions),
Completions: completions,
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Name: name,

Loading…
Cancel
Save