From 84632a98dd3a173cacffb99aa14fb268579478e3 Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Sun, 5 May 2019 12:14:41 +0800 Subject: [PATCH] fix backup status --- pkg/compute/models/guest_actions.go | 12 ++++++++---- pkg/compute/tasks/guest_backup_tasks.go | 20 +++++++++++++------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index d6aa054b23..d9f8de34c5 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -2659,7 +2659,7 @@ func (manager *SGuestManager) PerformDirtyServerStart(ctx context.Context, userC return nil, err } else if guest.BackupHostId == hostId { // slave guest - err := guest.GuestStartAndSyncToBackup(ctx, userCred, nil, "") + err := guest.GuestStartAndSyncToBackup(ctx, userCred, "", guest.Status) return nil, err } return nil, nil @@ -2703,9 +2703,13 @@ func (self *SGuest) StartGuestDeleteOnHostTask(ctx context.Context, userCred mcc return nil } -func (guest *SGuest) GuestStartAndSyncToBackup(ctx context.Context, userCred mcclient.TokenCredential, - data *jsonutils.JSONDict, parentTaskId string) error { - task, err := taskman.TaskManager.NewTask(ctx, "GuestStartAndSyncToBackupTask", guest, userCred, data, parentTaskId, "", nil) +func (guest *SGuest) GuestStartAndSyncToBackup( + ctx context.Context, userCred mcclient.TokenCredential, parentTaskId, guestStatus string, +) error { + data := jsonutils.NewDict() + data.Set("guest_status", jsonutils.NewString(guestStatus)) + task, err := taskman.TaskManager.NewTask( + ctx, "GuestStartAndSyncToBackupTask", guest, userCred, data, parentTaskId, "", nil) if err != nil { log.Errorln(err) return err diff --git a/pkg/compute/tasks/guest_backup_tasks.go b/pkg/compute/tasks/guest_backup_tasks.go index 0038b7a241..efaa716e2f 100644 --- a/pkg/compute/tasks/guest_backup_tasks.go +++ b/pkg/compute/tasks/guest_backup_tasks.go @@ -162,11 +162,17 @@ func (self *GuestStartAndSyncToBackupTask) OnStartBackupGuest(ctx context.Contex backupHost := models.HostManager.FetchHostById(guest.BackupHostId) nbdServerUri := fmt.Sprintf("nbd:%s:%d", backupHost.AccessIp, nbdServerPort) guest.SetMetadata(ctx, "backup_nbd_server_uri", nbdServerUri, self.UserCred) - db.OpsLog.LogEvent(guest, db.ACT_BACKUP_START, "", self.UserCred) - if utils.IsInStringArray(guest.Status, api.VM_RUNNING_STATUS) { + + // try get origin guest status + guestStatus, err := self.Params.GetString("guest_status") + if err != nil { + guestStatus = guest.Status + } + + if utils.IsInStringArray(guestStatus, api.VM_RUNNING_STATUS) { self.SetStage("OnRequestSyncToBackup", nil) - err := guest.GetDriver().RequestSyncToBackup(ctx, guest, self) + err = guest.GetDriver().RequestSyncToBackup(ctx, guest, self) if err != nil { self.SetStageFailed(ctx, fmt.Sprintf("Guest Request Sync to backup failed %s", err)) } @@ -292,17 +298,16 @@ func (self *GuestCreateBackupTask) OnCreateBackupFailed(ctx context.Context, gue func (self *GuestCreateBackupTask) OnCreateBackup(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { guestStatus, _ := self.Params.GetString("guest_status") - guest.SetStatus(self.UserCred, guestStatus, "") if utils.IsInStringArray(guestStatus, api.VM_RUNNING_STATUS) { - self.OnGuestStart(ctx, guest, nil) + self.OnGuestStart(ctx, guest, guestStatus) } else { self.TaskCompleted(ctx, guest, "") } } -func (self *GuestCreateBackupTask) OnGuestStart(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { +func (self *GuestCreateBackupTask) OnGuestStart(ctx context.Context, guest *models.SGuest, guestStatus string) { self.SetStage("OnSyncToBackup", nil) - err := guest.GuestStartAndSyncToBackup(ctx, self.UserCred, nil, self.GetTaskId()) + err := guest.GuestStartAndSyncToBackup(ctx, self.UserCred, self.GetTaskId(), guestStatus) if err != nil { self.TaskFailed(ctx, guest, fmt.Sprintf("Guest sycn to backup error %s", err.Error())) } @@ -316,6 +321,7 @@ func (self *GuestCreateBackupTask) TaskCompleted(ctx context.Context, guest *mod db.OpsLog.LogEvent(guest, db.ACT_CREATE_BACKUP, reason, self.UserCred) logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_CREATE_BACKUP, reason, self.UserCred, true) self.SetStageComplete(ctx, nil) + guest.StartSyncstatus(ctx, self.UserCred, "") } func (self *GuestCreateBackupTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason string) {