cinder创建卷源码分析
Posted syw-home
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cinder创建卷源码分析相关的知识,希望对你有一定的参考价值。
创建卷
卷创建流程图
卷创建时序图
各模块的理解
cinder api
- cinder/cinder/inspur/api/v3/inspur_volumes.py
- VolumeInspurController.create方法对创建进行响应,首先对project_id, user_id, volume_type, snapshot, metadata等信息进行检查
- 然后调用volume_api的create的方法进行创建。【 volume_api指向inspur_api】
- inspur_api调用openstack原生的api进行create。【 Inspur_API继承了原生的API,复用了create方法】
- cinder/cinder/volume/api.py
- API.create方法对source_volume, volume_type, snapshot等信息再进行检查,调用create_volume.get_flow方法进行创建
- cinder/cinder/volume/flows/api/create_volume.py
- get_flow方法内包含有5个类
- ExtractVolumeRequestTask: 抽取请求的信息,并将字段转换成其他任务可用的格式
- QuotaReserveTask: 配额检查及占用,与mysql数据库有交互,检查配额使用情况,占用的时候,将请求的额度写入到mysql中的quota_usages表中的reserved字段;【cinder quota-usage admin # 展示admin项目下配额使用情况】
- EntryCreateTask: 调用cinder.objects.volume.Volume.create()方法在database中创建记录,此时卷的状态为creating
- QuotaCommitTask: 在数据库中进行配额的确认
- VolumeCastTask: 向scheduler_rpcapi投递create_volume创建卷的信息,涉及如下函数
- execute函数
- cast_create_volume函数
- get_flow方法内包含有5个类
- cinder api完成了自己的工作
cinder scheduler
- cinder/cinder/scheduler/rpcapi.py (此步还属于cinder api层)
- SchedulerAPI.create_volume函数会通过消息队列异步调用SchedulerManager.create_volume函数。
- cinder/cinder/scheduler/manager.py
- SchedulerManager.create_volume函数,使用自己的flow来创建volume,其中还传入了driver, 该driver可理解为scheduler自己的过滤规则。
- cinder/scheduler/flows/create_volume.py
- get_flow函数,包含两个类
- ExtractSchedulerSpecTask: 对request_spec的信息进行补充
- ScheduleCreateVolumeTask, 其方法execute,会调用driver_api.schedule_create_volume
- get_flow函数,包含两个类
- cinder/cinder/scheduler/filter_scheduler.py
- 更新数据库, 主要对卷添加选择出来的存储后端信息
- 通过消息队列调用volume_rpcapi.create_volume
cinder volume
- cinder/cinder/volume/rpcapi.py
- VolumeAPI.create_volume会通过消息队列异步调用VolumeManager.create_volume
- cinder/cinder/volume/manager.py
- VolumeManager.create_volume方法中使用create_volume.get_flow()方法定义flow_engine任务流,并run之。【create_volume.get_flow(),来源cinder/cinder/volume/flows/manager/create_volume.py】
- cinder/cinder/volume/flows/manager/create_volume.py
- get_flow方法包含5个类,对应5个任务,如下
- ExtractVolumeRefTask: 参考volume_id获取整个volume信息
- OnFailureRescheduleTask: 当恢复回滚的时候,触发一个重新调度的请求
- ExtractVolumeSpecTask: 提取volume spec的信息
- NotifyVolumeActionTask: 创建消息通知
- CreateVolumeFromSpecTask: 调用driver创建volume
- CreateVolumeOnFinishTask: 创建成功的消息通知,并更新mysql数据库
- get_flow方法包含5个类,对应5个任务,如下
以上是关于cinder创建卷源码分析的主要内容,如果未能解决你的问题,请参考以下文章
[源码分析]Kubernests-csi与Openstack-Cinder使用Ceph-rbd创建快照过程对比及源码分析
[源码分析]Kubernests-csi与Openstack-Cinder使用Ceph-rbd创建快照过程对比及源码分析
[源码分析]Kubernests-csi与Openstack-Cinder使用Ceph-rbd创建快照过程对比及源码分析
[源码分析]Kubernests-csi与Openstack-Cinder使用Ceph-rbd创建快照过程对比及源码分析