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. webapi 异常处理

    参考:https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/error-handling/exception-handling ①HttpR ...

  2. VC中TRACE ASSERT VERIFY之用法

    一.TRACE宏     当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了.但在程序的Release版本中,它们是被完全禁止的.下面是一个典 ...

  3. Microsoft Visio / Project professional 2013 官方版本(下载)

    Microsoft Visio微软开发的一款软件, 它有助于 IT 和商务专业人员轻松地可视化.分析和交流复杂信息. 它能够将难以理解的复杂文本和表格转换为一目了然的 Visio 图表. 该软件通过创 ...

  4. misc类设备

    何为misc (1)中文名:杂项设备\杂散设备,它是一种典型的字符设,在一般情况下在内核中,所有的misc设备的主设备号是固定的,为10,它们的次设备号不一样:(2)可以在根文件系统中看到:/sys/ ...

  5. iOS 使约束带动画效果(Animate NSLayoutconstraints)

    http://stackoverflow.com/questions/12926566/are-nslayoutconstraints-animatable http://stackoverflow. ...

  6. ImageMagick使用小结

    #查看是否安装imagemagick sudo apt list | grep imagemagick #安装imagemagick sudo apt-get install imagemagick ...

  7. querySelectorAll 和 getElementBy 方法的区别

    作者:简生 链接:https://www.zhihu.com/question/24702250/answer/28695133 来源:知乎 1. W3C 标准 querySelectorAll 属于 ...

  8. Bugku一段base64

    本文转自:本文为博主原创文章,如有转载请注明出处,谢谢. https://blog.csdn.net/pdsu161530247/article/details/74640746 链接中高手给出的解题 ...

  9. Linux入门第五天——shell脚本入门(下)基础语法之调试debug

    一.如何debug 1.通过sh命令的参数: sh [-nvx] scripts.sh 选项与参数: -n :不要执行 script,仅查询语法的问题: -v :再执行 sccript 前,先将 sc ...

  10. 20155316 实验二《Java面向对象程序设计》实验报告

    实验1 实验内容 参考 博客 完成单元测试的学习 提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号 本提交点考查JUnit会不会使用,测 ...