Skip to content

Conversation

yeqiugt
Copy link

@yeqiugt yeqiugt commented Jun 27, 2025

What this PR does / why we need it:
修复裸金属删除时,多次删除会导致删除失败的bug。
问题在于,在task结束时,本应取出下一个task继续执行,但是错误的取成了当前task。

Does this PR need to be backport to the previous release branch?:
UNKNOWN

@yeqiugt
Copy link
Author

yeqiugt commented Jun 27, 2025

/cc @zexi @swordqiu
/area baremetal-agent

func onTaskEnd(task ITask) {
task.SetStage(nil)
ExecuteTask(task.GetTaskQueue().PopTask(), nil)
task.GetTaskQueue().PopTask()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yeqiugt 这样改有问题,删除的时候:

  • 正常情况下,task 队列为空:调用删除时,当前队列的 Task 会是 BaremetalServerDeleteTask ,task.GetTaskQueue().PopTask() 就会是这个删除 Task,这里的改动相当于忽略了这个任务
  • 有其他 task 情况下:BaremetalServerDeleteTask 会排队,必须等待队列里的其它任务执行完

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

如果要改进的话,可以在入队删除 Task 那里,把队列清空,只放入 DeleteTask

Copy link
Author

@yeqiugt yeqiugt Jul 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yeqiugt 这样改有问题,删除的时候:

  • 正常情况下,task 队列为空:调用删除时,当前队列的 Task 会是 BaremetalServerDeleteTask ,task.GetTaskQueue().PopTask() 就会是这个删除 Task,这里的改动相当于忽略了这个任务
  • 有其他 task 情况下:BaremetalServerDeleteTask 会排队,必须等待队列里的其它任务执行完
    当队列为空时,删除裸金属命令将会新建一个BaremetalServerDeleteTask,并立即开始执行;当执行完成后,触发onTaskEnd函数,将BaremetalServerDeleteTask抛出,并等待下一个任务。
    当队列不为空时,删除裸金属命令将会新建一个BaremetalServerDeleteTask,并添加到队尾。前序任务会依次执行完毕并调用onTaskEnd将自己抛出,调用下一个任务,最终调用到BaremetalServerDeleteTask。
    不知道我这样理解是否有问题?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants