fix(baremetal): ensure the execution of the BaremetalServerDestroyTask (#23495)

This commit is contained in:
Zexi Li
2025-10-09 17:07:10 +08:00
committed by GitHub
parent c88e8fef1b
commit 2cb0437596
3 changed files with 32 additions and 2 deletions
+8 -1
View File
@@ -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())
}
}
+19
View File
@@ -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 {
+5 -1
View File
@@ -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 {