@@ -299,6 +299,17 @@ func (c *Calcium) doDeployOneWorkload(
299
299
},
300
300
301
301
func (ctx context.Context ) (err error ) {
302
+ // avoid to be interrupted by MakeDeployStatus
303
+ processing := opts .GetProcessing (node .Name )
304
+ if ! decrProcessing {
305
+ processing = nil
306
+ }
307
+ // add workload metadata first
308
+ if err := c .store .AddWorkload (ctx , workload , processing ); err != nil {
309
+ return errors .WithStack (err )
310
+ }
311
+ log .Infof (ctx , "[doDeployOneWorkload] workload %s metadata created" , workload .ID )
312
+
302
313
// Copy data to workload
303
314
if len (opts .Files ) > 0 {
304
315
for _ , file := range opts .Files {
@@ -323,12 +334,15 @@ func (c *Calcium) doDeployOneWorkload(
323
334
}
324
335
}
325
336
326
- // start first
337
+ // start workload
327
338
msg .Hook , err = c .doStartWorkload (ctx , workload , opts .IgnoreHook )
328
339
if err != nil {
329
340
return err
330
341
}
331
342
343
+ // reset workload.hook
344
+ workload .Hook = opts .Entrypoint .Hook
345
+
332
346
// inspect real meta
333
347
var workloadInfo * enginetypes.VirtualizationInfo
334
348
workloadInfo , err = workload .Inspect (ctx ) // 补充静态元数据
@@ -340,22 +354,18 @@ func (c *Calcium) doDeployOneWorkload(
340
354
if workloadInfo .Networks != nil {
341
355
msg .Publish = utils .MakePublishInfo (workloadInfo .Networks , opts .Entrypoint .Publish )
342
356
}
343
- // reset users
357
+
358
+ // if workload metadata changed, then update
344
359
if workloadInfo .User != workload .User {
360
+ // reset users
345
361
workload .User = workloadInfo .User
346
- }
347
- // reset workload.hook
348
- workload .Hook = opts .Entrypoint .Hook
349
362
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 )
363
+ if err := c .store .UpdateWorkload (ctx , workload ); err != nil {
364
+ return errors .WithStack (err )
365
+ }
366
+ log .Infof (ctx , "[doDeployOneWorkload] workload %s metadata updated" , workload .ID )
357
367
}
358
- log . Infof ( ctx , "[doDeployOneWorkload] workload created and saved: %s" , workload . ID )
368
+
359
369
msg .WorkloadID = workload .ID
360
370
msg .WorkloadName = workload .Name
361
371
msg .Podname = workload .Podname
@@ -365,9 +375,15 @@ func (c *Calcium) doDeployOneWorkload(
365
375
366
376
// remove workload
367
377
func (ctx context.Context , _ bool ) error {
378
+ log .Errorf (ctx , "[doDeployOneWorkload] failed to deploy workload %s, rollback" , workload .ID )
368
379
if workload .ID == "" {
369
380
return nil
370
381
}
382
+
383
+ if err := c .store .RemoveWorkload (ctx , workload ); err != nil {
384
+ log .Errorf (ctx , "[doDeployOneWorkload] failed to remove workload %s" )
385
+ }
386
+
371
387
return workload .Remove (ctx , true )
372
388
},
373
389
c .config .GlobalTimeout ,
0 commit comments