@@ -323,7 +323,18 @@ func (c *Calcium) doDeployOneWorkload(
323
323
}
324
324
}
325
325
326
- // start first
326
+ // avoid be interrupted by MakeDeployStatus
327
+ processing := opts .GetProcessing (node .Name )
328
+ if ! decrProcessing {
329
+ processing = nil
330
+ }
331
+ // add workload metadata first
332
+ if err := c .store .AddWorkload (ctx , workload , processing ); err != nil {
333
+ return errors .WithStack (err )
334
+ }
335
+ log .Infof (ctx , "[doDeployOneWorkload] workload metadata created: %s" , workload .ID )
336
+
337
+ // start workload
327
338
msg .Hook , err = c .doStartWorkload (ctx , workload , opts .IgnoreHook )
328
339
if err != nil {
329
340
return err
@@ -340,22 +351,20 @@ func (c *Calcium) doDeployOneWorkload(
340
351
if workloadInfo .Networks != nil {
341
352
msg .Publish = utils .MakePublishInfo (workloadInfo .Networks , opts .Entrypoint .Publish )
342
353
}
343
- // reset users
344
- if workloadInfo .User != workload .User {
354
+
355
+ // if workload metadata changed, then update
356
+ if workloadInfo .User != workload .User || workload .Hook != opts .Entrypoint .Hook {
357
+ // reset users
345
358
workload .User = workloadInfo .User
346
- }
347
- // reset workload.hook
348
- workload .Hook = opts .Entrypoint .Hook
359
+ // reset workload.hook
360
+ workload .Hook = opts .Entrypoint .Hook
349
361
350
- // avoid be interrupted by MakeDeployStatus
351
- processing := opts .GetProcessing (node .Name )
352
- if ! decrProcessing {
353
- processing = nil
354
- }
355
- if err := c .store .AddWorkload (ctx , workload , processing ); err != nil {
356
- return errors .WithStack (err )
362
+ if err := c .store .UpdateWorkload (ctx , workload ); err != nil {
363
+ return errors .WithStack (err )
364
+ }
357
365
}
358
- log .Infof (ctx , "[doDeployOneWorkload] workload created and saved: %s" , workload .ID )
366
+
367
+ log .Infof (ctx , "[doDeployOneWorkload] workload updated: %s" , workload .ID )
359
368
msg .WorkloadID = workload .ID
360
369
msg .WorkloadName = workload .Name
361
370
msg .Podname = workload .Podname
@@ -368,6 +377,11 @@ func (c *Calcium) doDeployOneWorkload(
368
377
if workload .ID == "" {
369
378
return nil
370
379
}
380
+
381
+ if err := c .store .RemoveWorkload (ctx , workload ); err != nil {
382
+ log .Errorf (ctx , "[doDeployOneWorkload] failed to remove workload %s" )
383
+ }
384
+
371
385
return workload .Remove (ctx , true )
372
386
},
373
387
c .config .GlobalTimeout ,
0 commit comments