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进行额外的研究,这里暂时不提缘由。
设计模式
2. cinder-scheduler也是开启一个volume_create_scheduler flow,该flow包括如下几个task,ExtractSchedulerSpecTask和ScheduleCreateVolumeTask。api
向选出的host发送RPC请求。安全
3. cinder-volume也使用flow来建立volume。.net
相关连接:设计