讀古今文學網 > OpenStack系統架構設計實戰 > 3.8.3 cinder-volume服務啟動流程 >

3.8.3 cinder-volume服務啟動流程

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協議框架)。