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
相關連接:設計