将周期性任务切换到 Futurist 库¶
https://bugs.launchpad.net/ironic/+bug/1526277
Futurist 是一个新的 Oslo 库,提供了编写异步代码的工具。此规范建议将我们的周期性任务实现切换到 Futurist,以解决一些长期存在的问题。
问题描述¶
我们当前实现的主要问题是,所有周期性任务都在一个线程中运行。任何阻塞一段时间的任务都会阻止其他任务执行,而通过 IPMI 检查电源状态的任务经常发生这种情况。
切换到 Futurist 将允许并行执行所有任务。
提议的变更¶
修改 conductor 以使用 Futurist 库,而不是 oslo incubator 中的实现。
现有的工作池 将被重用于周期性任务。因此,现有的选项
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,而不是临时实现。