1)腳本bin.cinder-volume(導入相關模塊,讀取配置文件,獲取Cinder路徑,調用service.ProcessLauncher())。
2)cinder.service:ProcessLauncher.__init__(對ProcessLauncher類進行實例化)。
3)腳本bin.cinder-volume(調用service.Service.create(binary='cinder-volume'))。
4)cinder.service:Service.create(進行了一系列變量的初始化操作,然後對類進行初始化)。
5)腳本bin.cinder-volume(調用launcher.launch_server(server))。
6)cinder.service:ProcessLauncher.launch_server(調用self._start_child(wrap))。
7)cinder.service:ProcessLauncher._start_child(os.fork()會fork一個子進程,子進程創建成功後,就會調用self._child_process(wrap.server))。
8)cinder.service:ProcessLauncher._child_process(等待信號並關閉pipe,然後初始化Launcher類,再調用launcher.run_server(server))。
9)cinder.service:Launcher.run_server(先調用server.start,再調用server.wait)。
10)啟動cinder-volume服務。
cinder.service:Service.start(創建RPC連接,啟動消費者線程,然後等待隊列消息。當輪詢查詢到消息到達後,創建協程處理相關消息)。
11)等待cinder-volume服務結束。
·cinder.service:Service.wait(等待服務結束;調用x.wait())。
·cinder.service:wait(調用_launcher.wait())。
·cinder.service:Launcher.wait(等待cinder-volume協程結束,然後關閉RPC協議框架)。