cinder创建volume的流程-简单梳理
1. cinder-api接收到创建的请求,入口:cinder.api.v2.volumes.VolumeController#create,该方法主要负责一些参数的重新封装和校验,然后调用cinder.volume.api.API#create方法,该方法会启动volume_create_api工作流(flow),flow的状态从pending->running->success,该工作流包含若干个任务(TASK),TASK的转换状态与工作流一样,都是到success结束,每个TASK完成特定的任务。
这里需要对taskflow额外解释下,cinder在创建卷的过程中应用了taskflow(也可以理解为一种设计模式)库,来实现卷的创建。引进taskflow库能够实现方便的代码管理,而且增加功能实现的安全性。简单来说,**当实现一个功能时,应用taskflow模式能够实现对flow执行的管理,能够开始、中止、重新开始以及逆转回滚等操作,比如当执行某个flow操作出现异常时,可以视具体情况尝试进行flow的逆转回滚操作,实现回溯到flow执行之前的状态**。这些需要对taskflow进行额外的研究,这里暂时不提原因。
- ExtractVolumeRequestTask,验证request参数的合法性和对参数进行重新的组装,方便后边task的使用
- QuotaReserveTask,对请求中指定的size和type预留配额
- EntryCreateTask,在数据库中创建一条volume的记录
- QuotaCommitTask,对预留的配额进行提交
- VolumeCastTask,经过调度进行创建卷,通过scheduler_rpcapi.create_volume创建卷。
2. cinder-scheduler也是开启一个volume_create_scheduler flow,该flow包括以下几个task,ExtractSchedulerSpecTask和ScheduleCreateVolumeTask。
- ExtractSchedulerSpecTask,对request_spec的信息进行补充
- ScheduleCreateVolumeTask,使用filter和weight筛选出适合的backend
向选出的host发送RPC请求。
3. cinder-volume也使用flow来创建volume。
- ExtractVolumeRefTask,根据volume id获取完整的volume信息
- OnFailureRescheduleTask,通过查看代码,该task无任何作用
- ExtractVolumeSpecTask,提取volume spec的信息
- NotifyVolumeActionTask,开始创建的消息通知
- CreateVolumeFromSpecTask,调用driver创建volume
- CreateVolumeOnFinishTask,创建成功的消息通知以及数据库相关数据的更新
相关链接:
cinder创建volume的流程-简单梳理的更多相关文章
- cinder create volume的流程(1)
前提:代码的跟踪,使用的是ocata版本 零.执行cinder create 命令,创建数据卷,打开debug开关 [root@osnode241001 ~]# cinder --debug crea ...
- cinder create volume的流程-scheduler调度
创建 Volume 时,cinder-scheduler 会基于容量.Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume. 1.cinder-scheduler配置相关项 ...
- zookeeper启动流程简单梳理
等着測试童鞋完工,顺便里了下zookeeper的启动流程 zk3.4.6 启动脚本里面 nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_ ...
- cinder侧挂载卷流程分析
cinder侧挂载卷流程分析,存储类型以lvm+iscsi的方式为分析基础cinder侧主要调用了三个接口1)reserve_volume: 把volume的状态改为attaching,阻止其它节点执 ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- Activity的绘制流程简单分析(基于android 4.0源码进行分析)
要明白这个流程,我们还得从第一部开始,大家都知道 在activity里面 setcontentview 调用结束以后 就可以看到程序加载好我们的布局文件了,从而让我们在手机上看到这个画面. 那么我们来 ...
- C#正则表达式_简单梳理_Emoji表情字符处理
A-最近一直有接触到正则表达式,现对其做简单梳理: private const RegexOptions OPTIONS = RegexOptions.IgnoreCase | RegexOption ...
- RocketMQ 简单梳理 及 集群部署笔记【转】
一.RocketMQ 基础知识介绍Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...
随机推荐
- C语言入门编程思维引导
编程思维引导: C语言中 include<stdio.h> 称之为导包,导入写好的函数库,多个则依次写 #define N 3 意思是将N这个字母定义为数字3 当使用的时候就直接用 i ...
- 浏览器内多个标签页之间的通信之storage
在一个标签页里面使用 localStorage.setItem(key,value)添加(修改.删除)内容: 在另一个标签页里面监听 storage 事件. 即可得到 localstorge 存储的值 ...
- spark RDD官网RDD编程指南
http://spark.apache.org/docs/latest/rdd-programming-guide.html#using-the-shell Overview(概述) 在较高的层次上, ...
- TCP/IP协议的数据传输过程详解——IP与以太网的包收发操作
MTU:一个网络包的最大长度,以太网中一般是1500字节:(含有头部长度,包括IP头部,TCP头部,不包括MAC头部) MSS:除去头部后,一个网络包所能容纳的TCP的数据的最大长度 下图为TCP/I ...
- web安全入门笔记
0x01 前言 这正邪两字,原本难分. 正派弟子若是心术不正,便是邪徒. 邪派中人只要一心向善,便是正人君子. 0x01 信息安全的定义 信息安全,意为保护信息及信息系统免受未经授权的进入.使用.披露 ...
- libcurl编译及使用
环境: libcurl版本:7.54.1 VS:Visual Studio 2013 一.编译 1.下载最新版的libcurl(curl-7.54.1.zip)(地址:https://curl.hax ...
- #define定义数据溢出的问题
使用合泰单片机做一个小东西,使用 #define TIMER_COUNT (30*60*1000) 时,发现结果老是不对,后来想想,是不是数据溢出了,一查果然是这样.看来是stm32用多了,总以为#d ...
- Matlab_GUI
1.GUI中控件的属性 BackgroundColor 控件的背景 FontSize 控件字体的大小
- js点击后将文字复制到剪贴板,将图片复制到画图
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML> <HEAD& ...
- C语言 迭代部分的代码编写
C语言代码学习 迭代部分 迭代要用到函数部分的知识,一开始我写了计算n!的计算,代码和运行结果如下: 结果只能单一的计算出整数内的值,如果输入负值则结果为返回值1,显然是不对的,根据查书学习以后,知道 ...