支持取消动作计划执行

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 测试。

文档影响

需要在架构文档中更新 动作计划状态机

需要在架构文档中添加 动作状态机

参考资料

历史