From db90c53d6759242b607dea5cb75d3671ceb3525c Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Sun, 31 Mar 2019 22:03:08 +0800 Subject: [PATCH] fix: skip syncing status if guest in failure status (#138) --- pkg/compute/models/guests.go | 14 ++++++++++++-- pkg/compute/models/hosts.go | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 536b3ef23a..51ad2ad617 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -21,7 +21,6 @@ import ( "fmt" "strings" "time" - "yunion.io/x/onecloud/pkg/util/cloudinit" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -51,6 +50,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/auth" "yunion.io/x/onecloud/pkg/util/billing" + "yunion.io/x/onecloud/pkg/util/cloudinit" "yunion.io/x/onecloud/pkg/util/logclient" "yunion.io/x/onecloud/pkg/util/netutils2" "yunion.io/x/onecloud/pkg/util/seclib2" @@ -1843,6 +1843,10 @@ func (self *SGuest) GetIsolatedDevices() []SIsolatedDevice { return IsolatedDeviceManager.findAttachedDevicesOfGuest(self) } +func (self *SGuest) IsFailureStatus() bool { + return strings.Index(self.Status, "fail") >= 0 +} + func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.TokenCredential) error { lockman.LockObject(ctx, self) defer lockman.ReleaseObject(ctx, self) @@ -1859,6 +1863,10 @@ func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.Tok db.OpsLog.LogSyncUpdate(self, diff, userCred) } + if self.IsFailureStatus() { + return nil + } + return self.SetStatus(userCred, VM_UNKNOWN, "Sync lost") } @@ -1873,7 +1881,9 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token diff, err := db.UpdateWithLock(ctx, self, func() error { extVM.Refresh() // self.Name = extVM.GetName() - self.Status = extVM.GetStatus() + if !self.IsFailureStatus() { + self.Status = extVM.GetStatus() + } self.VcpuCount = extVM.GetVcpuCount() self.BootOrder = extVM.GetBootOrder() self.Vga = extVM.GetVga() diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index fe445dbbfc..9fa0c79f27 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -1762,7 +1762,7 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede for i := range dbVMs { if taskman.TaskManager.IsInTask(&dbVMs[i]) { - syncResult.Error(fmt.Errorf("object in task")) + syncResult.Error(fmt.Errorf("server %s(%s)in task", dbVMs[i].Name, dbVMs[i].Id)) return nil, syncResult } }