diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index e6a432af30..e12443265d 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -74,9 +74,10 @@ const ( VM_MIGRATING = "migrating" VM_MIGRATE_FAILED = "migrate_failed" - VM_CHANGE_FLAVOR = "change_flavor" - VM_REBUILD_ROOT = "rebuild_root" - VM_REBUILD_ROOT_FAIL = "rebld_root_fail" + VM_CHANGE_FLAVOR = "change_flavor" + VM_CHANGE_FLAVOR_FAIL = "change_flavor_fail" + VM_REBUILD_ROOT = "rebuild_root" + VM_REBUILD_ROOT_FAIL = "rebld_root_fail" VM_START_SNAPSHOT = "snapshot_start" VM_SNAPSHOT = "snapshot" diff --git a/pkg/compute/tasks/guest_change_config_task.go b/pkg/compute/tasks/guest_change_config_task.go index 84b112e43c..a530ae70be 100644 --- a/pkg/compute/tasks/guest_change_config_task.go +++ b/pkg/compute/tasks/guest_change_config_task.go @@ -34,51 +34,51 @@ func (self *GuestChangeConfigTask) OnInit(ctx context.Context, obj db.IStandalon func (self *GuestChangeConfigTask) OnDisksResizeComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { iResizeDisks, err := self.Params.Get("resize") if iResizeDisks == nil || err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) return } resizeDisks := iResizeDisks.(*jsonutils.JSONArray) for i := 0; i < resizeDisks.Length(); i++ { iResizeSet, err := resizeDisks.GetAt(i) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } resizeSet := iResizeSet.(*jsonutils.JSONArray) diskId, err := resizeSet.GetAt(0) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } idStr, err := diskId.GetString() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } jSize, err := resizeSet.GetAt(1) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } size, err := jSize.Int() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } iDisk, err := models.DiskManager.FetchById(idStr) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } disk := iDisk.(*models.SDisk) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(disk, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } @@ -86,7 +86,7 @@ func (self *GuestChangeConfigTask) OnDisksResizeComplete(ctx context.Context, ob var pendingUsage models.SQuota err = self.GetPendingUsage(&pendingUsage) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(disk, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } @@ -120,7 +120,7 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob if iVcpuCount != nil { vcpuCount, err = iVcpuCount.Int() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } @@ -128,14 +128,14 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob if iVmemSize != nil { vmemSize, err = iVmemSize.Int() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } } err = guest.GetDriver().RequestChangeVmConfig(ctx, guest, self, vcpuCount, vmemSize) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } @@ -162,14 +162,14 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob return nil }) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } var pendingUsage models.SQuota err = self.GetPendingUsage(&pendingUsage) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } @@ -187,13 +187,13 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob err = models.QuotaManager.CancelPendingUsage(ctx, self.UserCred, guest.ProjectId, &pendingUsage, &cancelUsage) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } err = self.SetPendingUsage(&pendingUsage) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } @@ -201,7 +201,7 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob self.SetStage("on_sync_status_complete", nil) err = guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.markStageFailed(obj, ctx, err.Error()) logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } @@ -227,3 +227,9 @@ func (self *GuestChangeConfigTask) OnGuestStartComplete(ctx context.Context, obj dt.Add(jsonutils.NewString(guest.Id), "id") self.SetStageComplete(ctx, dt) } + +func (self *GuestChangeConfigTask) markStageFailed(obj db.IStandaloneModel, ctx context.Context, reason string) { + guest := obj.(*models.SGuest) + guest.SetStatus(self.UserCred, models.VM_CHANGE_FLAVOR_FAIL, reason) + self.SetStageFailed(ctx, reason) +} \ No newline at end of file