将周期性任务切换到 Futurist 库¶
https://bugs.launchpad.net/ironic/+bug/1526277
Futurist 是一个新的 Oslo 库,提供了编写异步代码的工具。 本规范建议将我们的周期性任务实现切换到 Futurist 以解决一些长期存在的问题。
问题描述¶
我们当前实现的主要问题是,所有周期性任务都在一个线程中运行。 任何阻塞一段时间的任务都会阻止所有其他任务执行,并且在使用 IPMI 检查电源状态的任务中经常发生这种情况。
切换到 Futurist 将允许并行执行所有任务。
提议的变更¶
修改 conductor 以使用 Futurist 库,而不是 oslo incubator 中的实现。
现有的 worker pool 将被重用于周期性任务。 因此,现有的选项
workers_pool_size将设置任何时刻可以并行运行的最大任务数。将
ironic.openstack.common.periodic_task的所有用法切换到 Futurist 装饰器,并删除此模块。将
ironic.drivers.base.driver_periodic_task切换为在内部使用 Futurist 装饰器并弃用它。
备选方案¶
我们可以修复现有的实现。 但实际上这并不容易,因为它本质上需要重写它。
数据模型影响¶
无
状态机影响¶
无
REST API 影响¶
无
客户端 (CLI) 影响¶
无
RPC API 影响¶
无
驱动程序 API 影响¶
创建驱动程序周期性任务的旧方法将被弃用,驱动程序最终应切换到使用 Futurist 装饰器。
Nova 驱动程序影响¶
无
Ramdisk 影响¶
N/A
安全影响¶
无
其他最终用户影响¶
无
可扩展性影响¶
预计对可扩展性产生整体积极影响,因为每个 Ironic conductor 至少在理论上都能够管理更多的 IPMI 节点。
性能影响¶
一个周期性任务的性能将不再影响其他周期性任务的计时。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Dmitry Tantsur (irc: dtantsur, lp: divius)
工作项¶
依赖项¶
唯一的重大依赖项是 Futurist 本身。 在撰写本文时,它尚未发布官方版本,但正在快速发展,所有必需的代码已经登陆到 git master 分支。
测试¶
单元测试应该已经涵盖此功能。 将添加确保并行化的特定测试。
升级和向后兼容性¶
无
文档影响¶
应更新驱动程序周期性任务的文档,以提及 Futurist,而不是临时实现。