使用 fuser 进行更强大的设备状态检查¶
https://blueprints.launchpad.net/ironic/+spec/device-status-check-with-fuser
在分区后,为了避免“设备繁忙”问题,实现使用 fuser 进行更强大的设备状态检查。
问题描述¶
在分区后,我们有一个 sleep(3) 调用来避免“设备繁忙”问题。一种更不容易出错的解决方案是使用 fuser 检查是否有任何进程当前正在使用该磁盘。
提议的变更¶
用 fuser 检查已挂载的设备来替换 sleep 调用。如果至少找到一个访问,fuser 将以退出代码 0 返回并列出进程。如果没有访问,它将以退出代码 1 返回,没有输出。
备选方案¶
lsof 也可以用于检查打开的文件。在此用例中没有优势或劣势。
数据模型影响¶
无
REST API 影响¶
无
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
无
安全影响¶
无
其他最终用户影响¶
如果在分区后设备在可配置数量的重试后不可用,部署可以引发 InstanceDeployFailure。
可扩展性影响¶
无
性能影响¶
与每次睡眠 3 秒不同,fuser 将在分区完成后立即检查状态。这可以缩短部署时间。
其他部署者影响¶
在 disk_partitioner 组中的新配置选项
- check_device_interval: 在 Ironic 完成创建分区
表后,它将继续以这个间隔检查附加的 iSCSI 设备状态,然后再将镜像复制到节点。默认值为 1 秒。
- check_device_max_retries: 检查设备状态的重试次数。
默认值为 20。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
ifarkas
- 其他贡献者
无
工作项¶
将配置选项添加到
disk_partitioner组。使用 LoopingCall 实现设备状态检查。
依赖项¶
此补丁需要安装 fuser。
测试¶
单元测试
文档影响¶
文档应包括有关如何配置设备状态检查的说明。
参考资料¶
无