本文基于openstack Stein 版本
上文中,volume创建经scheduler 已经rpc cast 传给了 volume.
(1) cinder\volume\manager.py
VolumeManager.create_volume 函数对创建请求进行响应,并调用cinder.volume.flows.api.get_flow来创建。。
OnFailureReschedulerTask 当scheduer失败时重试,ExtractVolumeSpecTask 获取volume创建spec内容,NotifyVolumeActionTask 通知volume 创建动作,最终开始干活 CreateVolumeFromSpecTask 创建volume,以及 CreateVolumeOnFinishTask 通知volume创建完成。
1 | cinder.volume.manager.VolumeManager.create_volume |
CreateVolumeFromSpecTask 中又根据创建类型,是普通volume,还是image,还是备份还是快照等动作会有区别,这里已使用ceph的image创建为例,最终调用rbd的 _clone 函数clone 出一个块设备,最终resize 一下大小,同时更新根据image 元数据更新volume相关信息,最终更新volume 数据库相关信息。
CreateVolumeOnFinishTask 当volume创建完之后,更新volume 数据库状态信息。
支持volume 已经创建完成!