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的流程-简单梳理的更多相关文章

  1. cinder create volume的流程(1)

    前提:代码的跟踪,使用的是ocata版本 零.执行cinder create 命令,创建数据卷,打开debug开关 [root@osnode241001 ~]# cinder --debug crea ...

  2. cinder create volume的流程-scheduler调度

    创建 Volume 时,cinder-scheduler 会基于容量.Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume. 1.cinder-scheduler配置相关项 ...

  3. zookeeper启动流程简单梳理

    等着測试童鞋完工,顺便里了下zookeeper的启动流程 zk3.4.6 启动脚本里面 nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_ ...

  4. cinder侧挂载卷流程分析

    cinder侧挂载卷流程分析,存储类型以lvm+iscsi的方式为分析基础cinder侧主要调用了三个接口1)reserve_volume: 把volume的状态改为attaching,阻止其它节点执 ...

  5. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  6. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  7. Activity的绘制流程简单分析(基于android 4.0源码进行分析)

    要明白这个流程,我们还得从第一部开始,大家都知道 在activity里面 setcontentview 调用结束以后 就可以看到程序加载好我们的布局文件了,从而让我们在手机上看到这个画面. 那么我们来 ...

  8. C#正则表达式_简单梳理_Emoji表情字符处理

    A-最近一直有接触到正则表达式,现对其做简单梳理: private const RegexOptions OPTIONS = RegexOptions.IgnoreCase | RegexOption ...

  9. RocketMQ 简单梳理 及 集群部署笔记【转】

    一.RocketMQ 基础知识介绍Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...

随机推荐

  1. printf重定向问题

    1.使用printf库函数时,要加入头文件<stdio.h> 2.另外在keil里面需要把:use MicroLIB 勾选上,不然程序没办法在线调试.编译的时候不会报错. 3.当然可以不用 ...

  2. SharePoint2010QuickFlow安装及使用

    一:QuickFlow的安装 1,从http://quickflow.codeplex.com/下载解决方案包以及设计器. 2,将QuickFlow.dll以及QuickFlow.UI.dll添加到程 ...

  3. [转载]Linux crontab命令解析

    名称 : crontab crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表.-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权 ...

  4. Oracle条件查询

    Oracle条件查询 参考网址:http://www.oraclejsq.com/article/010100259.html Oracle条件查询时经常使用=.IN.LIKE.BETWEEN...A ...

  5. C++练习 | 递归判断二叉树是否同构

    #include <iostream> using namespace std; struct Tree { int data; Tree *lchild; Tree *rchild; } ...

  6. 偏前端-纯css,手写轮播-(焦点切换 和 自动轮播 只可选择一种,两者不可共存)

    现在我们一般都是在网上找个轮播插件,各种功能应有尽有,是吧!!~大家似乎已经生疏了手写是什么感觉.万一哪天想不起来,人家要手写,就尴尬了!~~跟我一起复习一下吧 不多说:效果图看一下: 高度不能是固定 ...

  7. Mac配置PHP+Nginx+MySQL开发环境

    Homebrew简称brew,OSX上的软件包管理工具,在Mac终端可以通过brew安装.更新.卸载各种软件,(简直就是神器级武器). 废话不多说,没安装brew自己去百度学习安装,这里就不多说了. ...

  8. MATLAB中常用函数及语法

    zeros() 1 zeros(n):n*n 全零矩阵 2 zeros(m,n):m*n全零矩阵 3 zeros(d1,d2,d3……dn):生成 d1*d2*d3*……*dn 全零矩阵或数组. 4 ...

  9. STM32串口一直进中断

    调试过程中遇到了使用串口什么都没接却一直进中断,接串口线到电脑上测试又正常的问题. 网上有人说需要将USART的RX模式从输入浮空改成输入上拉,改后测试正常,问题解决. 分析可能是什么都不接时浮空模式 ...

  10. 【win7下安装node.js错误:roling back action】与【"grunt" 不是内部或外部命令】 解决方法

    [win7下安装node.js错误:roling back action] 解决方法: Node.js 服务器端的JavaScript Node.js 是一个基于Chrome JavaScript 运 ...