diff --git a/pkg/baremetal/manager.go b/pkg/baremetal/manager.go index aa74ce3a3d..5d329611f8 100644 --- a/pkg/baremetal/manager.go +++ b/pkg/baremetal/manager.go @@ -1311,10 +1311,17 @@ func (b *SBaremetalInstance) GetTask() tasks.ITask { } func (b *SBaremetalInstance) SetTask(task tasks.ITask) { + // hack: clear exist tasks if task is server destroy task + if task.GetName() == tasks.BAREMETAL_SERVER_DESTROY_TASK { + log.Infof("clear tasks of baremetal %s before executing %s", b.GetName(), task.GetName()) + b.taskQueue.ClearTasks() + } b.taskQueue.AppendTask(task) if reflect.DeepEqual(task, b.taskQueue.GetTask()) { - log.Infof("Set task equal, ExecuteTask %s", task.GetName()) + log.Infof("Execute task %s of baremetal %s", task.GetName(), b.GetName()) tasks.ExecuteTask(task, nil) + } else { + log.Warningf("Append task %s of baremetal %s before executing %s", task.GetName(), b.GetName(), b.taskQueue.DebugString()) } } diff --git a/pkg/baremetal/tasks/base.go b/pkg/baremetal/tasks/base.go index 8662327569..d7394a497c 100644 --- a/pkg/baremetal/tasks/base.go +++ b/pkg/baremetal/tasks/base.go @@ -180,6 +180,25 @@ func (q *TaskQueue) AppendTask(task ITask) *TaskQueue { return q } +func (q *TaskQueue) ClearTasks() { + for { + existTask := q.PopTask() + if existTask != nil { + log.Warningf("Clear task %s", existTask.GetName()) + } else { + break + } + } +} + +func (q *TaskQueue) DebugString() string { + str := "" + for e := q.objList.Front(); e != nil; e = e.Next() { + str += fmt.Sprintf("%s, ", e.Value.(ITask).GetName()) + } + return str +} + type TaskFactory func(userCred mcclient.TokenCredential, bm IBaremetal, taskId string, data jsonutils.JSONObject) ITask type SBaremetalTaskBase struct { diff --git a/pkg/baremetal/tasks/destroy.go b/pkg/baremetal/tasks/destroy.go index e5c7f966fc..f5cecd76ab 100644 --- a/pkg/baremetal/tasks/destroy.go +++ b/pkg/baremetal/tasks/destroy.go @@ -26,6 +26,10 @@ import ( var _ IServerBaseDeployTask = new(SBaremetalServerDestroyTask) +const ( + BAREMETAL_SERVER_DESTROY_TASK = "BaremetalServerDestroyTask" +) + type SBaremetalServerDestroyTask struct { SBaremetalServerBaseDeployTask } @@ -45,7 +49,7 @@ func NewBaremetalServerDestroyTask( } func (self *SBaremetalServerDestroyTask) GetName() string { - return "BaremetalServerDestroyTask" + return BAREMETAL_SERVER_DESTROY_TASK } func (self *SBaremetalServerDestroyTask) RemoveEFIOSEntry() bool {