使用 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。

测试

  • 单元测试

文档影响

文档应包括有关如何配置设备状态检查的说明。

参考资料