讀古今文學網 > OpenStack系統架構設計實戰 > 3.8 Cinder功能及典型工作流程 >

3.8 Cinder功能及典型工作流程

3.8.1 cinder-api服務啟動流程

1)腳本bin.cinder-api(讀取配置文件,獲取Cinder路徑,導入必需的模塊,調用service.WSGIService('osapi_volume'))。

2)cinder.service:WSGIService._init_(使用osapi_volume初始化了一個WSGIService服務,調用wsgi.Server)。

3)cinder.wsgi:Server._init_(wsgi.Server類的對象初始化操作,創建了一個GreenPool協程池,但並不啟動WSGI服務)。

4)腳本bin.cinder-api(調用service.serve(server))。

5)cinder.service:serve(初始化Launcher類,然後調用_launcher.launch_server)。

6)cinder.service:Launcher.launch_server(調用eventlet.spawn,建立一個新的綠色線程用來運行變量func所指定的方法;調用self.run_server)。

7)cinder.service:Launcher.run_server(先調用server.start,再調用server.wait)。

8)啟動cinder-api服務。

·cinder.service:WSGIService.start(調用self.server.start())。

·cinder.wsgi:Server.start(產生了一個協程,在self._start中又調用eventlet.wsgi.server,啟動了osapi_volume所指定的阻塞式eventlet WSGI服務,也就是說,cinder-api服務啟動成功了)。

9)等待cinder-api服務結束。

·cinder.service:WSGIService.wait(等待WSGIService服務結束;調用self.server.wait)。

·cinder.wsgi:Server.wait(調用self._server.wait())。

·cinder.service:wait(調用_launcher.wait())。

·cinder.service:Launcher.wait(等待Cinder-Api協程結束,然後關閉RPC協議框架)。