支持取消动作计划执行¶
https://blueprints.launchpad.net/watcher/+spec/cancel-action-plan
问题描述¶
云管理员可能出于任何原因想要取消动作计划的执行。一个动作计划可能长时间处于执行状态,云管理员可能希望手动执行这些操作,或者希望通过其他方法满足优化需求。
目前管理员可以将动作计划状态更新为 已取消,但 Watcher 不会采取任何措施来取消动作计划。它只会将动作计划状态更新为 已取消。
Watcher 应该能够取消动作计划的执行。
用例¶
作为 Watcher 管理员,我希望 Watcher 能够取消长时间处于 ONGOING 状态的动作计划。
作为 Watcher 管理员,我希望取消意外启动的任何动作计划。
作为 Watcher 管理员,我希望取消动作计划,因为我的优化需求已经得到满足。
提议的变更¶
为 动作计划 添加新的状态 取消中。
当 watcher-api 收到云管理员取消 ONGOING 动作计划的请求时,状态变为 CANCELLING。当 watcher-applier 成功执行取消请求时,它会将动作计划状态更新为 已取消。当 watcher-applier 无法完成动作计划取消请求时,它会将动作计划状态更新为 失败。
为 动作 添加新的状态 取消中、已取消。
CANCELLING,当 watcher-applier 取消一个 ONGOING 动作时。
CANCELLED,当 watcher-applier 取消一个 PENDING 动作时。当 watcher-applier 成功完成 ONGOING 动作的取消时。
在 watcher-client 中添加一个新的命令 watcher actionplan cancel 来取消动作计划。
修改动作计划的状态机,以添加新的动作计划状态和转换。
修改动作的状态机,以添加新的动作状态和转换。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
https://blueprints.launchpad.net/watcher/+spec/notifications-actionplan-cancel
其他最终用户影响¶
将添加一个新的命令 watcher actionplan cancel 来取消动作计划。
性能影响¶
无
其他部署者影响¶
Watcher 无法保证取消正在进行的优化后的集群状态。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
<adi-sky17>
工作项¶
动作计划取消的实现将使用 taskflow 完成。当正在运行的引擎收到异常时,它将停止执行并为 flow 中添加的所有任务(动作)调用 revert 方法。在动作的 revert 方法中,将检查当前动作状态,并根据动作状态(PENDING、ONGOING、SUCCEEDED)执行定义的步骤。
e.g. if action_state is PENDING: # update action_state to CANCELLED if action_state is ONGOING: # call abort_action if action state is SUCCEEDED: # do nothing
在启动任何新动作之前,watcher-applier 将检查动作计划的状态,如果其状态更新为 CANCELLING,它将向 taskflow 引擎触发一个“ActionPlanCancel”异常,taskflow 引擎将以相反的顺序调用所有任务(动作)的 revert 方法,保持依赖关系不变。
依赖项¶
对于动作计划取消操作,我们需要为 ONGOING 动作调用 Abort API。
live 迁移的 abort API 已经可用。 https://blueprints.launchpad.net/nova/+spec/abort-live-migration
cold 迁移的 abort API 正在开发中。 https://blueprints.launchpad.net/nova/+spec/abort-cold-migration
测试¶
需要更新单元测试和 tempest 测试。
文档影响¶
需要在架构文档中更新 动作计划状态机。
需要在架构文档中添加 动作状态机。
参考资料¶
历史¶
无