searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

openstack之创建卷接口流程分析

2023-07-27 07:11:51
32
0

openstack中存储模块主要由cinder组件管理,cinder主要由API、scheduler以及volume服务3部分组成,API负责接收请求,scheduler服务调度,volume服务负责具体的请求的处理,本文以创建卷方法来分析整体流程

API处理流程:

当请求发送到API服务时候,API服务会解析请求的url,将其路由到对应的controller的方法,以V3版本为例子,该路由会对应到cinder/api/v3/volumes.py代码中的VolumeController的create函数

create(self,req,body)函数主要处理流程

1、校验body的请求参数

2、构造对应的size,name,description以及其他参数

3、调用volume_api.create方法创建卷

volume_api.create的处理流程(cinder/volume/api.py中的create函数)

1、校验输入参数

2、构造新的创建参数

3、根据参数构造flow_engine,该flow_engine主要为创建卷的flow。

4、调用flow创建卷

flow中有两个TASK比较重要,分别为EntryCreateTask和VolumeCastTask

其中EntryCreateTask主要为在数据库中创建卷的记录,VolumeCastTask主要为构造参数,然后调用scheduler_rpcapi的create_volume函数

其中create_volume函数(cinder/scheduler/rpcapi.py)流程为

1、获取创建参数

2、调用ctx.cast异步发送rpc请求。请求发送到监听的volume服务

该rpcapi调用(cinder/scheduler/manager.py)中的create_volume函数,该函数也采用flow方式调用,主要为ScheduleCreateVolumeTask的调用,该Task主要执行为schedule_create_volume函数(cinder/scheduler/driver.py--cinder/scheduler/filter_scheduler.py)

schedule_create_volume主要执行

1、调度获取对应执行的backend服务

2、更新数据库记录,主要为卷中更新host字段

3、调用volume服务的rpcapi提供的create_volume

volume_rpcapi.create_volume函数主要为cinder/volume/rcpapi.py的函数,流程为

1、选择volume对应消息队列的topic主题

2、将消息发送给消息队列

消息队列会将消息发送到volume服务注册的topic,主要对应到volume服务的rpc调用(cinder/volume/manager.py对应的函数中),

volume服务(cinder/volume/manager.py)的create_volume函数主要执行:

1、参数分析

2、构造create_volume的Task Flow(cinder/volume/flows/manager/create_volume.py),主要为CreateVolumeFromSpecTask

3、执行结果处理

CreateVolumeFromSpecTask主要执行为:

1、参数解析

2、根据类型选择不同函数处理,以下主要分析raw类型的创建,不同类型调用不同函数,raw主要调用_create_raw_volume

3、数据库更新

_create_raw_volume函数比较简单,主要为调用驱动的create_volume,以下使用rbd驱动来分析

驱动的create_volume(cinder/volume/drivers/rbd.py)流程为:

1、根据是否加密来选择不同函数处理,加密由_create_encrypted_volume处理,非加密由原来函数处理

2、生成RBDVolumeProxy对象,通过调用rbd的image对象来进行创建卷(由ceph的rbd包提供)。

通过以上流程分析,最后则创建对应的卷。具体代码细节请对照openstack代码逐步分析

 
0条评论
作者已关闭评论
黄****冰
1文章数
0粉丝数
黄****冰
1 文章 | 0 粉丝
黄****冰
1文章数
0粉丝数
黄****冰
1 文章 | 0 粉丝
原创

openstack之创建卷接口流程分析

2023-07-27 07:11:51
32
0

openstack中存储模块主要由cinder组件管理,cinder主要由API、scheduler以及volume服务3部分组成,API负责接收请求,scheduler服务调度,volume服务负责具体的请求的处理,本文以创建卷方法来分析整体流程

API处理流程:

当请求发送到API服务时候,API服务会解析请求的url,将其路由到对应的controller的方法,以V3版本为例子,该路由会对应到cinder/api/v3/volumes.py代码中的VolumeController的create函数

create(self,req,body)函数主要处理流程

1、校验body的请求参数

2、构造对应的size,name,description以及其他参数

3、调用volume_api.create方法创建卷

volume_api.create的处理流程(cinder/volume/api.py中的create函数)

1、校验输入参数

2、构造新的创建参数

3、根据参数构造flow_engine,该flow_engine主要为创建卷的flow。

4、调用flow创建卷

flow中有两个TASK比较重要,分别为EntryCreateTask和VolumeCastTask

其中EntryCreateTask主要为在数据库中创建卷的记录,VolumeCastTask主要为构造参数,然后调用scheduler_rpcapi的create_volume函数

其中create_volume函数(cinder/scheduler/rpcapi.py)流程为

1、获取创建参数

2、调用ctx.cast异步发送rpc请求。请求发送到监听的volume服务

该rpcapi调用(cinder/scheduler/manager.py)中的create_volume函数,该函数也采用flow方式调用,主要为ScheduleCreateVolumeTask的调用,该Task主要执行为schedule_create_volume函数(cinder/scheduler/driver.py--cinder/scheduler/filter_scheduler.py)

schedule_create_volume主要执行

1、调度获取对应执行的backend服务

2、更新数据库记录,主要为卷中更新host字段

3、调用volume服务的rpcapi提供的create_volume

volume_rpcapi.create_volume函数主要为cinder/volume/rcpapi.py的函数,流程为

1、选择volume对应消息队列的topic主题

2、将消息发送给消息队列

消息队列会将消息发送到volume服务注册的topic,主要对应到volume服务的rpc调用(cinder/volume/manager.py对应的函数中),

volume服务(cinder/volume/manager.py)的create_volume函数主要执行:

1、参数分析

2、构造create_volume的Task Flow(cinder/volume/flows/manager/create_volume.py),主要为CreateVolumeFromSpecTask

3、执行结果处理

CreateVolumeFromSpecTask主要执行为:

1、参数解析

2、根据类型选择不同函数处理,以下主要分析raw类型的创建,不同类型调用不同函数,raw主要调用_create_raw_volume

3、数据库更新

_create_raw_volume函数比较简单,主要为调用驱动的create_volume,以下使用rbd驱动来分析

驱动的create_volume(cinder/volume/drivers/rbd.py)流程为:

1、根据是否加密来选择不同函数处理,加密由_create_encrypted_volume处理,非加密由原来函数处理

2、生成RBDVolumeProxy对象,通过调用rbd的image对象来进行创建卷(由ceph的rbd包提供)。

通过以上流程分析,最后则创建对应的卷。具体代码细节请对照openstack代码逐步分析

 
文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0