0
点赞
收藏
分享

微信扫一扫

openstack cinder volume创建流程以及源码分析(三)

本文基于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创建完成。

<!-- more -->

 cinder.volume.manager.VolumeManager.create_volume
    try:
            # NOTE(flaper87): Driver initialization is
            # verified by the task itself.
            flow_engine = create_volume.get_flow(
                context_elevated,
                self,
                self.db,
                self.driver,
                self.scheduler_rpcapi,
                self.host,
                volume,
                allow_reschedule,
                context,
                request_spec,
                filter_properties,
                image_volume_cache=self.image_volume_cache,
            )
        except Exception:
            msg = _("Create manager volume flow failed.")
            LOG.exception(msg, resource={'type': 'volume', 'id': volume.id})
            raise exception.CinderException(msg)

CreateVolumeFromSpecTask 中又根据创建类型,是普通volume,还是image,还是备份还是快照等动作会有区别,这里已使用ceph的image创建为例,最终调用rbd的 _clone 函数clone 出一个块设备,最终resize 一下大小,同时更新根据image 元数据更新volume相关信息,最终更新volume 数据库相关信息。

CreateVolumeOnFinishTask 当volume创建完之后,更新volume 数据库状态信息。

支持volume 已经创建完成!

举报

相关推荐

0 条评论