@@ -138,21 +138,12 @@ func (cc *Controller) createJob(jobInfo *apis.JobInfo, nextState state.UpdateSta
138138 glog .V (3 ).Infof ("Starting to create Job <%s/%s>" , jobInfo .Job .Namespace , jobInfo .Job .Name )
139139 defer glog .V (3 ).Infof ("Finished Job <%s/%s> create" , jobInfo .Job .Namespace , jobInfo .Job .Name )
140140
141- job := jobInfo .Job
141+ job := jobInfo .Job . DeepCopy ()
142142 glog .Infof ("Current Version is: %d of job: %s/%s" , job .Status .Version , job .Namespace , job .Name )
143143
144- newJob , err := cc .needUpdateForVolumeClaim (job )
145- if err != nil {
144+ if update , err := cc .filljob (job ); err != nil || update {
146145 return err
147146 }
148- if newJob != nil {
149- if job , err := cc .vkClients .BatchV1alpha1 ().Jobs (job .Namespace ).Update (newJob ); err != nil {
150- glog .Errorf ("Failed to update Job %v/%v: %v" ,
151- job .Namespace , job .Name , err )
152- return err
153- }
154- return nil
155- }
156147
157148 if err := cc .pluginOnJobAdd (job ); err != nil {
158149 cc .recorder .Event (job , v1 .EventTypeWarning , string (vkv1 .PluginError ),
@@ -168,6 +159,18 @@ func (cc *Controller) createJob(jobInfo *apis.JobInfo, nextState state.UpdateSta
168159 return err
169160 }
170161
162+ if job , err := cc .vkClients .BatchV1alpha1 ().Jobs (job .Namespace ).UpdateStatus (job ); err != nil {
163+ glog .Errorf ("Failed to update status of Job %v/%v: %v" ,
164+ job .Namespace , job .Name , err )
165+ return err
166+ } else {
167+ if e := cc .cache .Update (job ); e != nil {
168+ glog .Errorf ("CreateJob - Failed to update Job %v/%v in cache: %v" ,
169+ job .Namespace , job .Name , e )
170+ return e
171+ }
172+ }
173+
171174 return nil
172175}
173176
@@ -356,10 +359,11 @@ func (cc *Controller) createJobIOIfNotExist(job *vkv1.Job) error {
356359 return nil
357360}
358361
359- func (cc * Controller ) needUpdateForVolumeClaim (job * vkv1.Job ) (* vkv1.Job , error ) {
362+ func (cc * Controller ) needUpdateForVolumeClaim (job * vkv1.Job ) (bool , * vkv1.Job , error ) {
360363 // If VolumeClaimName does not exist, generate them for Job.
361364 var newJob * vkv1.Job
362365 volumes := job .Spec .Volumes
366+ update := false
363367 for index , volume := range volumes {
364368 vcName := volume .VolumeClaimName
365369 if len (vcName ) == 0 {
@@ -368,7 +372,7 @@ func (cc *Controller) needUpdateForVolumeClaim(job *vkv1.Job) (*vkv1.Job, error)
368372 vcName = fmt .Sprintf ("%s-volume-%s" , job .Name , randomStr )
369373 exist , err := cc .checkPVCExist (job , vcName )
370374 if err != nil {
371- return nil , err
375+ return false , nil , err
372376 }
373377 if exist {
374378 continue
@@ -377,11 +381,12 @@ func (cc *Controller) needUpdateForVolumeClaim(job *vkv1.Job) (*vkv1.Job, error)
377381 newJob = job .DeepCopy ()
378382 }
379383 newJob .Spec .Volumes [index ].VolumeClaimName = vcName
384+ update = true
380385 break
381386 }
382387 }
383388 }
384- return newJob , nil
389+ return update , newJob , nil
385390}
386391
387392func (cc * Controller ) checkPVCExist (job * vkv1.Job , vcName string ) (bool , error ) {
@@ -494,3 +499,31 @@ func (cc *Controller) calcPGMinResources(job *vkv1.Job) *v1.ResourceList {
494499
495500 return minAvailableTasksRes .Convert2K8sResource ()
496501}
502+
503+ func (cc * Controller ) filljob (job * vkv1.Job ) (bool , error ) {
504+ update , newJob , err := cc .needUpdateForVolumeClaim (job )
505+ if err != nil {
506+ return false , err
507+ }
508+ if update {
509+ if _ , err := cc .vkClients .BatchV1alpha1 ().Jobs (job .Namespace ).Update (newJob ); err != nil {
510+ glog .Errorf ("Failed to update Job %v/%v: %v" ,
511+ job .Namespace , job .Name , err )
512+ return false , err
513+ }
514+ return true , nil
515+ } else if job .Status .State .Phase == "" {
516+ job .Status .State .Phase = vkv1 .Pending
517+ if j , err := cc .vkClients .BatchV1alpha1 ().Jobs (job .Namespace ).UpdateStatus (job ); err != nil {
518+ glog .Errorf ("Failed to update status of Job %v/%v: %v" ,
519+ job .Namespace , job .Name , err )
520+ } else {
521+ if e := cc .cache .Update (j ); e != nil {
522+ glog .Error ("Failed to update cache status of Job %v/%v: %v" , job .Namespace , job .Name , e )
523+ }
524+ }
525+ return true , nil
526+ }
527+
528+ return false , nil
529+ }
0 commit comments