diff --git a/pkg/compute/tasks/disk_resize_task.go b/pkg/compute/tasks/disk_resize_task.go index 443caf9bdd..c6ca501dcd 100644 --- a/pkg/compute/tasks/disk_resize_task.go +++ b/pkg/compute/tasks/disk_resize_task.go @@ -107,8 +107,9 @@ func (self *DiskResizeTask) OnDiskResizeComplete(ctx context.Context, disk *mode self.finalReleasePendingUsage(ctx) } -func (self *DiskResizeTask) OnDiskResizeCompleteFailed(ctx context.Context, disk *models.SDisk, reason jsonutils.JSONObject) { - disk.SetDiskReady(ctx, self.GetUserCred(), reason.String()) +func (self *DiskResizeTask) OnDiskResizeCompleteFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { + disk.SetDiskReady(ctx, self.GetUserCred(), data.String()) db.OpsLog.LogEvent(disk, db.ACT_RESIZE_FAIL, disk.GetShortDesc(), self.UserCred) - logclient.AddActionLog(disk, logclient.ACT_RESIZE, reason.String(), self.UserCred, false) + logclient.AddActionLog(disk, logclient.ACT_RESIZE, data.String(), self.UserCred, false) + self.SetStageFailed(ctx, data.String()) } diff --git a/pkg/compute/tasks/disk_save_task.go b/pkg/compute/tasks/disk_save_task.go index 8990ae8ff2..28f4fb3209 100644 --- a/pkg/compute/tasks/disk_save_task.go +++ b/pkg/compute/tasks/disk_save_task.go @@ -66,6 +66,7 @@ func (self *DiskSaveTask) StartBackupDisk(ctx context.Context, disk *models.SDis func (self *DiskSaveTask) OnDiskBackupCompleteFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { disk.SetDiskReady(ctx, self.GetUserCred(), data.String()) db.OpsLog.LogEvent(disk, db.ACT_SAVE_FAIL, data.String(), self.GetUserCred()) + self.SetStageFailed(ctx, data.String()) } func (self *DiskSaveTask) OnDiskBackupComplete(ctx context.Context, disk *models.SDisk, data *jsonutils.JSONDict) { diff --git a/pkg/compute/tasks/guest_deploy_task.go b/pkg/compute/tasks/guest_deploy_task.go index c5f4a51a23..e27bae8e1d 100644 --- a/pkg/compute/tasks/guest_deploy_task.go +++ b/pkg/compute/tasks/guest_deploy_task.go @@ -127,16 +127,25 @@ func (self *GuestDeployTask) OnDeployGuestComplete(ctx context.Context, obj db.I func (self *GuestDeployTask) OnDeployGuestCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DEPLOY_FAILED, data.String()) + self.SetStageFailed(ctx, data.String()) } func (self *GuestDeployTask) OnDeployStartGuestComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { self.SetStageComplete(ctx, nil) } +func (self *GuestDeployTask) OnDeployStartGuestCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { + self.SetStageFailed(ctx, data.String()) +} + func (self *GuestDeployTask) OnDeployGuestSyncstatusComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { self.SetStageComplete(ctx, nil) } +func (self *GuestDeployTask) OnDeployGuestSyncstatusCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { + self.SetStageFailed(ctx, data.String()) +} + type GuestDeployBackupTask struct { GuestDeployTask } diff --git a/pkg/compute/tasks/guest_rebuild_root_task.go b/pkg/compute/tasks/guest_rebuild_root_task.go index 65fd05f6bc..5ff2969281 100644 --- a/pkg/compute/tasks/guest_rebuild_root_task.go +++ b/pkg/compute/tasks/guest_rebuild_root_task.go @@ -111,6 +111,7 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Co db.OpsLog.LogEvent(guest, db.ACT_REBUILD_ROOT_FAIL, data, self.UserCred) guest.SetStatus(self.UserCred, models.VM_REBUILD_ROOT_FAIL, "") logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, data, self.UserCred, false) + self.SetStageFailed(ctx, data.String()) } func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_start_task.go b/pkg/compute/tasks/guest_start_task.go index 0f6c5454d1..946edbb5f6 100644 --- a/pkg/compute/tasks/guest_start_task.go +++ b/pkg/compute/tasks/guest_start_task.go @@ -68,7 +68,7 @@ func (self *GuestStartTask) RequestStart(ctx context.Context, guest *models.SGue guest.SetStatus(self.UserCred, models.VM_STARTING, "") result, err := guest.GetDriver().RequestStartOnHost(ctx, guest, host, self.UserCred, self) if err != nil { - self.onStartGuestFailed(ctx, guest, err) + self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) } else { if result != nil && jsonutils.QueryBoolean(result, "is_running", false) { // guest.SetStatus(self.UserCred, models.VM_RUNNING, "start") @@ -84,7 +84,7 @@ func (self *GuestStartTask) RequestStartBacking(ctx context.Context, guest *mode guest.SetStatus(self.UserCred, models.VM_BACKUP_STARTING, "") result, err := guest.GetDriver().RequestStartOnHost(ctx, guest, host, self.UserCred, self) if err != nil { - self.onStartGuestFailed(ctx, guest, err) + self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) } else { if result != nil && jsonutils.QueryBoolean(result, "is_running", false) { self.OnStartBackupGuestComplete(ctx, guest, nil) @@ -100,13 +100,17 @@ func (self *GuestStartTask) OnStartBackupGuestComplete(ctx context.Context, gues nbdServerUri := fmt.Sprintf("nbd:%s:%d", backupHost.AccessIp, nbdServerPort) guest.SetMetadata(ctx, "backup_nbd_server_uri", nbdServerUri, self.UserCred) } else { - self.onStartGuestFailed(ctx, guest, fmt.Errorf("Start backup guest result missing nbd_server_port")) + self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString("Start backup guest result missing nbd_server_port")) return } } self.RequestStart(ctx, guest) } +func (self *GuestStartTask) OnStartBackupGuestCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { + self.OnStartCompleteFailed(ctx, guest, data) +} + func (self *GuestStartTask) OnStartComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) db.OpsLog.LogEvent(guest, db.ACT_START, guest.GetShortDesc(), self.UserCred) @@ -123,14 +127,10 @@ func (self *GuestStartTask) OnGuestSyncstatusAfterStart(ctx context.Context, obj func (self *GuestStartTask) OnStartCompleteFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { guest := obj.(*models.SGuest) + guest.SetStatus(self.UserCred, models.VM_START_FAILED, err.String()) db.OpsLog.LogEvent(guest, db.ACT_START_FAIL, err, self.UserCred) -} - -func (self *GuestStartTask) onStartGuestFailed(ctx context.Context, guest *models.SGuest, err error) { - guest.SetStatus(self.UserCred, models.VM_START_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) - self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) logclient.AddActionLog(guest, logclient.ACT_VM_START, err, self.UserCred, false) + self.SetStageFailed(ctx, err.String()) } func (self *GuestStartTask) taskComplete(ctx context.Context, guest *models.SGuest) { diff --git a/pkg/compute/tasks/guest_suspend_task.go b/pkg/compute/tasks/guest_suspend_task.go index 13023f12f3..54c192ea3f 100644 --- a/pkg/compute/tasks/guest_suspend_task.go +++ b/pkg/compute/tasks/guest_suspend_task.go @@ -40,6 +40,7 @@ func (self *GuestSuspendTask) OnSuspendCompleteFailed(ctx context.Context, obj d guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_RUNNING, "") db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, err.String(), self.UserCred) + self.SetStageFailed(ctx, err.String()) } func (self *GuestSuspendTask) OnSuspendGuestFail(guest *models.SGuest, reason string) {