diff --git a/pkg/cloudcommon/db/taskman/tasks.go b/pkg/cloudcommon/db/taskman/tasks.go index cb30f0f16e..39fda11e65 100644 --- a/pkg/cloudcommon/db/taskman/tasks.go +++ b/pkg/cloudcommon/db/taskman/tasks.go @@ -465,6 +465,10 @@ func (task *STask) ScheduleRun(data jsonutils.JSONObject) { runTask(task.Id, data) } +func (self *STask) IsSubtask() bool { + return self.HasParentTask() +} + func (self *STask) HasParentTask() bool { parentTaskId, _ := self.Params.GetString(PARENT_TASK_ID_KEY) if len(parentTaskId) > 0 { diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index 8ee1cece9e..78fa19673b 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -188,7 +188,7 @@ func (self *GuestDeleteTask) doStartDeleteGuest(ctx context.Context, obj db.ISta func (self *GuestDeleteTask) StartPendingDeleteGuest(ctx context.Context, guest *models.SGuest) { guest.DoPendingDelete(ctx, self.UserCred) - self.SetStage("on_pending_delete_complete", nil) + self.SetStage("OnPendingDeleteComplete", nil) guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) } @@ -197,18 +197,14 @@ func (self *GuestDeleteTask) OnPendingDeleteComplete(ctx context.Context, obj db if !guest.IsSystem { self.NotifyServerDeleted(ctx, guest) } - self.SetStage("on_sync_guest_conf_complete", nil) + // self.SetStage("on_sync_guest_conf_complete", nil) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_PENDING_DELETE, nil, self.UserCred, true) - guest.StartSyncTask(ctx, self.UserCred, false, self.GetTaskId()) -} - -func (self *GuestDeleteTask) OnSyncGuestConfComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { + // guest.StartSyncTask(ctx, self.UserCred, false, self.GetTaskId()) self.SetStageComplete(ctx, nil) } -func (self *GuestDeleteTask) OnSyncGuestConfCompleteFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { - guest := obj.(*models.SGuest) - self.OnFailed(ctx, guest, err) +func (self *GuestDeleteTask) OnPendingDeleteCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { + self.OnPendingDeleteComplete(ctx, obj, nil) } func (self *GuestDeleteTask) StartDeleteGuest(ctx context.Context, guest *models.SGuest) { diff --git a/pkg/compute/tasks/guest_stop_task.go b/pkg/compute/tasks/guest_stop_task.go index b8c3af9c3b..7d641a557c 100644 --- a/pkg/compute/tasks/guest_stop_task.go +++ b/pkg/compute/tasks/guest_stop_task.go @@ -41,17 +41,13 @@ func (self *GuestStopTask) OnInit(ctx context.Context, obj db.IStandaloneModel, self.stopGuest(ctx, guest) } -func (self *GuestStopTask) isSubtask() bool { - return jsonutils.QueryBoolean(self.Params, "subtask", false) -} - func (self *GuestStopTask) stopGuest(ctx context.Context, guest *models.SGuest) { host := guest.GetHost() if host == nil { self.OnGuestStopTaskCompleteFailed(ctx, guest, jsonutils.NewString("no associated host")) return } - if !self.isSubtask() { + if !self.IsSubtask() { guest.SetStatus(self.UserCred, api.VM_STOPPING, "") } self.SetStage("OnMasterStopTaskComplete", nil) @@ -82,7 +78,7 @@ func (self *GuestStopTask) OnMasterStopTaskCompleteFailed(ctx context.Context, o } func (self *GuestStopTask) OnGuestStopTaskComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - if !self.isSubtask() { + if !self.IsSubtask() { guest.SetStatus(self.UserCred, api.VM_READY, "") } db.OpsLog.LogEvent(guest, db.ACT_STOP, guest.GetShortDesc(ctx), self.UserCred) @@ -95,7 +91,9 @@ func (self *GuestStopTask) OnGuestStopTaskComplete(ctx context.Context, guest *m } func (self *GuestStopTask) OnGuestStopTaskCompleteFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { - guest.SetStatus(self.UserCred, api.VM_STOP_FAILED, reason.String()) + if !self.IsSubtask() { + guest.SetStatus(self.UserCred, api.VM_STOP_FAILED, reason.String()) + } db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, reason.String(), self.UserCred) self.SetStageFailed(ctx, reason.String()) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_STOP, reason.String(), self.UserCred, false)