From 3ccf78ae7d881afb29bf1f479801d8da646a5d16 Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Tue, 1 Sep 2020 10:18:37 +0800 Subject: [PATCH] fix: server purge may fail (#7696) Co-authored-by: Qiu Jian --- pkg/cloudcommon/db/taskman/subtasks.go | 2 +- pkg/compute/models/guest_actions.go | 2 +- pkg/compute/tasks/guest_delete_task.go | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pkg/cloudcommon/db/taskman/subtasks.go b/pkg/cloudcommon/db/taskman/subtasks.go index c004681400..37b091530f 100644 --- a/pkg/cloudcommon/db/taskman/subtasks.go +++ b/pkg/cloudcommon/db/taskman/subtasks.go @@ -46,7 +46,7 @@ type SSubTask struct { Stage string `width:"64" charset:"ascii" nullable:"false" primary:"true"` // Column(VARCHAR(64, charset='ascii'), nullable=False, primary_key=True) SubtaskId string `width:"36" charset:"ascii" nullable:"false" primary:"true"` // Column(VARCHAR(36, charset='ascii'), nullable=False, primary_key=True) Status string `width:"36" charset:"ascii" nullable:"false" default:"init"` // Column(VARCHAR(36, charset='ascii'), nullable=False, default=SUBTASK_INIT) - Result string `length:"medium" charset:"ascii" nullable:"true"` // Column(MEDIUMTEXT(charset='ascii'), nullable=True) + Result string `length:"medium" charset:"utf8" nullable:"true"` // Column(MEDIUMTEXT(charset='ascii'), nullable=True) } func (manager *SSubTaskmanager) GetSubTask(ptaskId string, subtaskId string) *SSubTask { diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index 5aa76f69fc..4c26786e1d 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -91,7 +91,7 @@ func (self *SGuest) PreCheckPerformAction( ) error { if self.Hypervisor == api.HYPERVISOR_KVM { host := self.GetHost() - if (host.HostStatus == api.HOST_OFFLINE || !host.Enabled.Bool()) && + if host != nil && (host.HostStatus == api.HOST_OFFLINE || !host.Enabled.Bool()) && utils.IsInStringArray(action, []string{ "start", "restart", "stop", "reset", "rebuild-root", diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index 1a61fdda7f..f2e004817c 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -174,8 +174,12 @@ func (self *GuestDeleteTask) doClearSecurityGroupComplete(ctx context.Context, g models.IsolatedDeviceManager.ReleaseDevicesOfGuest(ctx, guest, self.UserCred) guest.RevokeAllSecgroups(ctx, self.UserCred) // sync revoked secgroups to remote cloud - self.SetStage("OnSyncConfigComplete", nil) - guest.StartSyncTaskWithoutSyncstatus(ctx, self.UserCred, false, self.GetTaskId()) + if jsonutils.QueryBoolean(self.Params, "purge", false) { + self.OnSyncConfigComplete(ctx, guest, nil) + } else { + self.SetStage("OnSyncConfigComplete", nil) + guest.StartSyncTaskWithoutSyncstatus(ctx, self.UserCred, false, self.GetTaskId()) + } } func (self *GuestDeleteTask) OnSyncConfigComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) {