From 9ca00e1646e299eb4a6fef7aa75b3457010e1845 Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Thu, 21 Feb 2019 12:29:05 +0800 Subject: [PATCH] switch to backup add status --- pkg/compute/models/guest_actions.go | 3 ++- pkg/compute/models/guests.go | 2 ++ pkg/compute/tasks/guest_backup_tasks.go | 13 ++++++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index b47c8ef624..1164432baf 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -2252,12 +2252,13 @@ func (self *SGuest) AllowPerformSwitchToBackup(ctx context.Context, userCred mcc } func (self *SGuest) PerformSwitchToBackup(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - if !utils.IsInStringArray(self.Status, []string{VM_READY, VM_RUNNING}) { + if self.Status == VM_BLOCK_STREAM { return nil, httperrors.NewBadRequestError("Cannot swith to backup when guest in status %s", self.Status) } if len(self.BackupHostId) == 0 { return nil, httperrors.NewBadRequestError("Guest no backup host") } + self.SetStatus(userCred, VM_SWITCH_TO_BACKUP, "Switch to backup") if task, err := taskman.TaskManager.NewTask(ctx, "GuestSwitchToBackupTask", self, userCred, nil, "", "", nil); err != nil { log.Errorf(err.Error()) return nil, err diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 878a1dca3f..7788d4d6b1 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -66,6 +66,8 @@ const ( VM_DEPLOYING_BACKUP_FAILED = "deploging_backup_fail" VM_DELETING_BACKUP = "deleting_backup" VM_BACKUP_DELETE_FAILED = "backup_delete_fail" + VM_SWITCH_TO_BACKUP = "switch_to_backup" + VM_SWITCH_TO_BACKUP_FAILED = "switch_to_backup_fail" VM_ATTACH_DISK_FAILED = "attach_disk_fail" VM_DETACH_DISK_FAILED = "detach_disk_fail" diff --git a/pkg/compute/tasks/guest_backup_tasks.go b/pkg/compute/tasks/guest_backup_tasks.go index 2f6a30b7b8..6230db2d6f 100644 --- a/pkg/compute/tasks/guest_backup_tasks.go +++ b/pkg/compute/tasks/guest_backup_tasks.go @@ -39,7 +39,7 @@ func (self *GuestSwitchToBackupTask) OnEnsureMasterGuestStoped(ctx context.Conte self.SetStage("OnBackupGuestStoped", nil) err := guest.GetDriver().RequestStopOnHost(ctx, guest, backupHost, self) if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("Stop backup guest error: %s", err)) + self.OnFail(ctx, guest, fmt.Sprintf("Stop backup guest error: %s", err)) } } @@ -56,13 +56,15 @@ func (self *GuestSwitchToBackupTask) OnBackupGuestStoped(ctx context.Context, gu } } db.OpsLog.LogEvent(guest, db.ACT_SWITCH_FAILED, fmt.Sprintf("Switch to backup disk error: %s", err), self.UserCred) - self.SetStageFailed(ctx, fmt.Sprintf("Switch to backup disk error: %s", err)) + self.OnFail(ctx, guest, fmt.Sprintf("Switch to backup disk error: %s", err)) + return } } err := guest.SwitchToBackup() if err != nil { db.OpsLog.LogEvent(guest, db.ACT_SWITCH_FAILED, fmt.Sprintf("Switch to backup guest error: %s", err), self.UserCred) - self.SetStageFailed(ctx, fmt.Sprintf("Switch to backup guest error: %s", err)) + self.OnFail(ctx, guest, fmt.Sprintf("Switch to backup guest error: %s", err)) + return } db.OpsLog.LogEvent(guest, db.ACT_SWITCHED, fmt.Sprintf("Switch to backup guest error: %s", err), self.UserCred) self.SetStage("OnNewMasterStarted", nil) @@ -73,6 +75,11 @@ func (self *GuestSwitchToBackupTask) OnNewMasterStarted(ctx context.Context, gue self.SetStageComplete(ctx, nil) } +func (self *GuestSwitchToBackupTask) OnFail(ctx context.Context, guest *models.SGuest, reason string) { + guest.SetStatus(self.UserCred, models.VM_SWITCH_TO_BACKUP_FAILED, reason) + self.SetStageFailed(ctx, reason) +} + /********************* GuestStartAndSyncToBackupTask *********************/ type GuestStartAndSyncToBackupTask struct {