neutron-server是neutron的核心组件之中的一个。负责直接接收外部请求,然后调用后端对应plugin进行处理。

其核心启动过程代码主要在neutron.server包中。

__init__.py文件里包含一个main()函数,是WSGIserver開始的模块,而且通过调用serve_wsgi来创建一个NeutronApiService的实例。然后通过eventletgreenpool来执行WSGI的应用程序,响应来自client的请求。

主要过程为:

   ()

绿化各个模块为支持协程(通过打补丁的方式让本地导入的库都支持协程)。

[1:])

.config_file:

        

                   " 

                   " 

通过解析命令行传入的參数。获取配置文件所在。

(

)

创建基于协程的线程池。

neutron_api = service.

NeutronApiService)

api_thread = pool.

wait)

serve_wsgi方法创建NeutronApiService实例(作为一个WsgiService),并调用其的start()来启动socketserver端。

#neutron.service

(cls):

    try:

        ()

        ()

    except Exception:

        ():

            LOG('Unrecoverable error: please check log '

                            'for details.'))

    return service

neutron.service.NeutronApiService类继承自neutron.service.WsgiService。其create方法返回一个appname默觉得“neutron”的WsgiService对象;start方法则调用_run_wsgi方法。

(self):

        .app_name)

_run_wsgi方法主要是从api-paste.ini文件里读取应用(最后是利用neutron.api.v2.router:APIRouter.factory来构造应用)。然后为应用创建一个wsgi的服务端,并启动应用。主要代码为。

(app_name):

    (app_name)

    if not app:

        LOG('No known API applications configured.'))

        return

    

    .bind_host,

                 workers=cfg.api_workers)

    # Dump all option values here after all options are parsed

    .DEBUG)

    LOG.info(_("Neutron service started, listening on 

             {'.bind_host,

              '.bind_port})

    return server

至此,neutron server启动完毕。之后。须要创建rpc服务端

try

:

            neutron_rpc = service()

except NotImplementedError:

            LOG.info(_("RPC was already started in parent process by plugin."))

else:

            rpc_thread = pool.wait)

            rpc_thread())

            api_thread())

这些代码创建pluginrpc服务端,并将apirpc的生存绑定到一起,一个死掉,则另外一个也死掉。

()

最后是后台不断等待。

下图总结了neutron-server的核心启动过程。

OpenStack 中的neutron-server启动过程



相关文章:

  • 2021-10-20
  • 2021-08-01
  • 2021-05-22
  • 2021-05-12
  • 2021-05-08
  • 2021-11-05
  • 2021-07-22
猜你喜欢
  • 2021-05-10
  • 2021-06-30
  • 2022-01-06
  • 2021-10-18
  • 2021-12-05
相关资源
相似解决方案