Openstack学習ノートのNeutron-serverサービスローディングとスタートソース分析(三)
本文はOpenstackを勉強する過程で整理して総括するので、時間と個人の能力が有限なため、誤りの所は避けられないで、ご指摘を歓迎します。
Neutron-serverサービスのローディングとスタートソース分析(二)でモジュール機能の拡張とローディングを行いました。Neutron-serverサービスのローディングとスタートソース分析(一)に戻ります。run_wsgi関数
ここに配置されたファイルのデフォルトのappi_ウォーカーは0です
私たちはwsgiのサービスを開始しました。リソースのロードと拡張などの準備ができました。「すべてのものは東風だけが欠けています。」今はスレッドプールのspawnスレッドからneutron appiコマンドをモニターします。ここでneutron apiコマンドが来たら、最後にneutron.apper.v.2.baseのControllerにルーティングして処理します。
メイン関数は最後にneutron_を実行します。rpc=service.serve_rpc()はpluginによって実現され、一つ以上のRpcworkerを開始し、要求を監督し、topicsにおけるメッセージ・キューを傍受する。これはneutronの内部コンポーネント間の通信を傍受するためのものと理解しています。
これでOpenstack neutronサービスの開始過程におけるリソースのロードと拡張のソースコードの簡単な解析が完了しました。
Neutron-serverサービスのローディングとスタートソース分析(二)でモジュール機能の拡張とローディングを行いました。Neutron-serverサービスのローディングとスタートソース分析(一)に戻ります。run_wsgi関数
<span style="font-size:14px;">def _run_wsgi(app_name):
app = config.load_paste_app(app_name)
ifnot app:
LOG.error(_('No known API applications configured.'))
return
server = wsgi.Server("Neutron")
server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host,
workers=cfg.CONF.api_workers)
# Dump all option values here after all options are parsed
cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
LOG.info(_("Neutron service started, listening on%(host)s:%(port)s"),
{'host': cfg.CONF.bind_host,
'port': cfg.CONF.bind_port})
return server</span>
ap=config.load_paste_アプリはここでモジュール機能の拡張とロードを完了します。<span style="font-size:14px;">server = wsgi.Server("Neutron")
server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host,
workers=cfg.CONF.api_workers)</span>
neutronのサービスを作成し、このserverを起動します。ここに配置されたファイルのデフォルトのappi_ウォーカーは0です
<span style="font-size:14px;">def start(self, application, port, host='0.0.0.0', workers=0):
"""Run a WSGI server with the givenapplication."""
self._host = host
self._port = port
backlog = CONF.backlog
# socket
self._socket = self._get_socket(self._host,
self._port,
backlog=backlog)
self._launch(application, workers)</span>
<span style="font-size:14px;">def _launch(self, application, workers=0):
service = WorkerService(self, application)
if workers <1:
# workers 1
self._server = service
service.start()
systemd.notify_once()
else:
# API
# 0.01s
self._server = common_service.ProcessLauncher(wait_interval=1.0)
self._server.launch_service(service, workers=workers)</span>
実行完了_run_wsgi関数は、service.start()の実行を完了し、neutron_を完成させます。appi=service.serve_wsgiの仕事。<span style="font-size:14px;">def main():
……
try:
pool = eventlet.GreenPool()
neutron_api = service.serve_wsgi(service.NeutronApiService)
api_thread = pool.spawn(neutron_api.wait)
try:
neutron_rpc = service.serve_rpc()</span>
私たちはwsgiのサービスを開始しました。リソースのロードと拡張などの準備ができました。「すべてのものは東風だけが欠けています。」今はスレッドプールのspawnスレッドからneutron appiコマンドをモニターします。ここでneutron apiコマンドが来たら、最後にneutron.apper.v.2.baseのControllerにルーティングして処理します。
メイン関数は最後にneutron_を実行します。rpc=service.serve_rpc()はpluginによって実現され、一つ以上のRpcworkerを開始し、要求を監督し、topicsにおけるメッセージ・キューを傍受する。これはneutronの内部コンポーネント間の通信を傍受するためのものと理解しています。
これでOpenstack neutronサービスの開始過程におけるリソースのロードと拡張のソースコードの簡単な解析が完了しました。