Skip to content

Commit 266795b

Browse files
committed
ignore already exist err
1 parent 0140a7b commit 266795b

File tree

4 files changed

+38
-25
lines changed

4 files changed

+38
-25
lines changed

pkg/apis/batch/v1alpha1/job.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ const (
125125
// TerminateJobAction if this action is set, the whole job wil be terminated
126126
// and can not be resumed: all Pod of Job will be evicted, and no Pod will be recreated.
127127
TerminateJobAction Action = "TerminateJob"
128-
//CompleteJobAction if this action is set, the unfinished pods will be killed, job completed.
128+
// CompleteJobAction if this action is set, the unfinished pods will be killed, job completed.
129129
CompleteJobAction Action = "CompleteJob"
130130

131131
// ResumeJobAction is the action to resume an aborted job.

pkg/controllers/job/job_controller_actions.go

+31-19
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func (cc *Controller) killJob(jobInfo *apis.JobInfo, nextState state.NextStateFn
4242
defer glog.V(3).Infof("Finished Job <%s/%s> killing", jobInfo.Job.Namespace, jobInfo.Job.Name)
4343

4444
job := jobInfo.Job
45-
//Job version is bumped only when job is killed
45+
// Job version is bumped only when job is killed
4646
job.Status.Version = job.Status.Version + 1
4747
glog.Infof("Current Version is: %d of job: %s/%s", job.Status.Version, job.Namespace, job.Name)
4848
if job.DeletionTimestamp != nil {
@@ -88,7 +88,14 @@ func (cc *Controller) killJob(jobInfo *apis.JobInfo, nextState state.NextStateFn
8888
}
8989
terminating++
9090
case v1.PodSucceeded:
91-
succeeded++
91+
err := cc.kubeClients.CoreV1().Pods(pod.Namespace).Delete(pod.Name, nil)
92+
if err != nil {
93+
succeeded++
94+
glog.Errorf("Failed to delete pod %s for Job %s, err %#v",
95+
pod.Name, job.Name, err)
96+
errs = append(errs, err)
97+
continue
98+
}
9299
case v1.PodFailed:
93100
err := cc.kubeClients.CoreV1().Pods(pod.Namespace).Delete(pod.Name, nil)
94101
if err != nil {
@@ -240,7 +247,7 @@ func (cc *Controller) syncJob(jobInfo *apis.JobInfo, nextState state.NextStateFn
240247
terminating++
241248
} else {
242249
running++
243-
} /**/
250+
}
244251
case v1.PodSucceeded:
245252
succeeded++
246253
case v1.PodFailed:
@@ -382,11 +389,12 @@ func (cc *Controller) createServiceIfNotExist(job *vkv1.Job) error {
382389
},
383390
}
384391

385-
if _, e := cc.kubeClients.CoreV1().Services(job.Namespace).Create(svc); e != nil {
386-
glog.V(3).Infof("Failed to create Service for Job <%s/%s>: %v",
387-
job.Namespace, job.Name, err)
388-
389-
return e
392+
if _, err := cc.kubeClients.CoreV1().Services(job.Namespace).Create(svc); err != nil {
393+
if !apierrors.IsAlreadyExists(err) {
394+
glog.V(3).Infof("Failed to create Service for Job <%s/%s>: %v",
395+
job.Namespace, job.Name, err)
396+
return err
397+
}
390398
}
391399
}
392400

@@ -419,10 +427,10 @@ func (cc *Controller) createJobIOIfNotExist(job *vkv1.Job) error {
419427

420428
glog.V(3).Infof("Try to create input PVC: %v", pvc)
421429

422-
if _, e := cc.kubeClients.CoreV1().PersistentVolumeClaims(job.Namespace).Create(pvc); e != nil {
430+
if _, err := cc.kubeClients.CoreV1().PersistentVolumeClaims(job.Namespace).Create(pvc); err != nil {
423431
glog.V(3).Infof("Failed to create input PVC for Job <%s/%s>: %v",
424432
job.Namespace, job.Name, err)
425-
return e
433+
return err
426434
}
427435
}
428436
}
@@ -433,7 +441,7 @@ func (cc *Controller) createJobIOIfNotExist(job *vkv1.Job) error {
433441
if !apierrors.IsNotFound(err) {
434442
glog.V(3).Infof("Failed to get output PVC for Job <%s/%s>: %v",
435443
job.Namespace, job.Name, err)
436-
//return err
444+
return err
437445
}
438446

439447
pvc := &v1.PersistentVolumeClaim{
@@ -449,10 +457,12 @@ func (cc *Controller) createJobIOIfNotExist(job *vkv1.Job) error {
449457

450458
glog.V(3).Infof("Try to create output PVC: %v", pvc)
451459

452-
if _, e := cc.kubeClients.CoreV1().PersistentVolumeClaims(job.Namespace).Create(pvc); e != nil {
453-
glog.V(3).Infof("Failed to create input PVC for Job <%s/%s>: %v",
454-
job.Namespace, job.Name, err)
455-
return e
460+
if _, err := cc.kubeClients.CoreV1().PersistentVolumeClaims(job.Namespace).Create(pvc); err != nil {
461+
if !apierrors.IsAlreadyExists(err) {
462+
glog.V(3).Infof("Failed to create input PVC for Job <%s/%s>: %v",
463+
job.Namespace, job.Name, err)
464+
return err
465+
}
456466
}
457467
}
458468
}
@@ -482,11 +492,13 @@ func (cc *Controller) createPodGroupIfNotExist(job *vkv1.Job) error {
482492
},
483493
}
484494

485-
if _, e := cc.kbClients.SchedulingV1alpha1().PodGroups(job.Namespace).Create(pg); e != nil {
486-
glog.V(3).Infof("Failed to create PodGroup for Job <%s/%s>: %v",
487-
job.Namespace, job.Name, err)
495+
if _, err := cc.kbClients.SchedulingV1alpha1().PodGroups(job.Namespace).Create(pg); err != nil {
496+
if !apierrors.IsAlreadyExists(err) {
497+
glog.V(3).Infof("Failed to create PodGroup for Job <%s/%s>: %v",
498+
job.Namespace, job.Name, err)
488499

489-
return e
500+
return err
501+
}
490502
}
491503
}
492504

pkg/controllers/job/job_controller_handler.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func (cc *Controller) updateJob(oldObj, newObj interface{}) {
8383
newJob.Namespace, newJob.Name, err)
8484
}
8585

86-
//NOTE: Since we only reconcile job based on Spec, we will ignore other attributes
86+
// NOTE: Since we only reconcile job based on Spec, we will ignore other attributes
8787
// For Job status, it's used internally and always been updated via our controller.
8888
if reflect.DeepEqual(newJob.Spec, oldJob.Spec) {
8989
glog.Infof("Job update event is ignored since no update in 'Spec'.")

pkg/controllers/job/job_controller_util.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,13 @@ func applyPolicies(job *vkv1.Job, req *apis.Request) vkv1.Action {
166166
return req.Action
167167
}
168168

169-
//For all the requests triggered from discarded job resources will perform sync action instead
170-
if req.JobVersion < job.Status.Version {
171-
glog.Infof("Request %s is outdated, will perform sync instead.", req)
169+
if req.Event == vkv1.OutOfSyncEvent {
172170
return vkv1.SyncJobAction
173171
}
174172

175-
if req.Event == vkv1.OutOfSyncEvent {
173+
// For all the requests triggered from discarded job resources will perform sync action instead
174+
if req.JobVersion < job.Status.Version {
175+
glog.Infof("Request %s is outdated, will perform sync instead.", req)
176176
return vkv1.SyncJobAction
177177
}
178178

@@ -186,6 +186,7 @@ func applyPolicies(job *vkv1.Job, req *apis.Request) vkv1.Action {
186186
return policy.Action
187187
}
188188
}
189+
break
189190
}
190191
}
191192
}

0 commit comments

Comments
 (0)