zoukankan      html  css  js  c++  java
  • 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,创建成功的消息通知以及数据库相关数据的更新

    相关链接:

  • 相关阅读:
    C#控制键盘大小写切换
    C#表示空字符
    正则表达式30分钟入门教程[转自deerchao]
    学习deercao的正则笔记
    c# winform 全角自动转化半角问题(C#中ImeMode的值)
    C# 键盘中的按键对应的KeyValue
    这个Replace可以忽略大小写
    Keys枚举
    反射总结
    C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]
  • 原文地址:https://www.cnblogs.com/gushiren/p/9642346.html
Copyright © 2011-2022 走看看