在看过了nova模块的源码之后,再去看OpenStack其它模块的源码会轻松很多,因为框架也是大同小异的。自四月份开通博客写了几篇文章后,真心觉得写篇技术文章如果要把前前后后牵扯到的其它技术内容都做介绍实在是太费精力了,如果是为自己日后复习则也没必要,因此这篇neutron-server启动流程的文章,我感觉懒得啰嗦了,直接展示一下源码流程吧,若有误导之处,请您谅解并欢迎指正。

neutron-server的main函数如下图:

main中调用了/usr/lib/python2.7/dist-packages/neutron/service.py中的serve_wsgi函数,参数为该文件中的NeutronApiService类,我们看下这个serve_wsgi函数干了什么,如下图:

可以看到,该函数中先调用了NeutronApiService的create函数返回一个对象,接着调用对象的start函数。再看下NeutronApiService类:

NeutronApiService类继承自WsgiService类,只有一个create静态函数,该函数创建了一个该类的对象并返回,有一个app_name参数,默认为“neutron”。因此,start函数是在基类WsgiService实现,其中调用了_run_wsgi(self.app_name),再看下_run_wsgi函数的实现:

_run_wsgi函数调用了config.load_paste_app(app_name),app_name是“neutron”,就是使用python的Paste模块,并根据配置文件/etc/neutron/api-paste.ini的内容加载一个wsgi的应用。如图中标注,对于路径/v2.0,最后会调用到neutron.api.v2.router:APIRouter.factory函数类生成一个应用并建立映射关系。api-paste.ini内容如下:

然后初始化一个wsgi.Server对象,再调用wsgi.Server的start方法,Paste加载的应用作为参数传递,关于Paste模块的介绍看这里。来下面再看下wsgi.Server类:

start调用了self._launch函数,之后的就是启动了一个wsgi服务,具体就不分析了,自己看代码吧。至此,neutron-server的wsgi服务起来了,等待后续的服务请求。

别忘了,main函数中还有一个重要的调用service.server_rpc(),该函数代码如下:

该函数中首先调用manager.NeutronManager.get_plugin()获得一个plugin的对象实例,然后将其作为参数给RpcWorker的构造函数,生成一个RpcWorker对象,再调用RpcWorker对象的start函数。start函数代码如下,

它调用了plugin的start_rpc_listeners()函数,根据我安装环境的配置,这里的plugin是neutron.plugins.ml2.plugin.Ml2Plugin类的对象,看下该类的实现:

可以看到,这个函数启动了一个rpc服务,用于和agent交互。接下来的文章,会写agent端的流程,再接下的文章则详细介绍创建一个租户网络的完整调用流程。

OpenStack源码系列---neutron-server的更多相关文章

  1. OpenStack源码系列---nova-api

    OpenStack源码实际上是比较规范的,但是对刚刚接触到源代码的人来说,却感觉有点混乱.我刚开始的时候也常常搞乱,比如service.Service类继承自openstack.common.serv ...

  2. OpenStack源码分析 Neutron源码分析(一)-----------Restful API篇

    原文:https://blog.csdn.net/happyanger6/article/details/54586463 首先,先分析WSGI应用的实现. 由前面的文章http://blog.csd ...

  3. OpenStack源码系列---nova-conductor

    nova-conductor启动的也是一个rpc server,代码框架和nova-compute类似,所以我也懒得再详细分析一遍服务启动的过程.nova-api那篇文章的最后我说"cctx ...

  4. OpenStack源码系列---起始篇

    近一年来我负责公司云点的自动化部署工作,包括公司自有云平台方案.XenServer.vSphere.Ovirt和OpenStack的自动化安装部署,目前已经到了OpenStack这一部分.自动化部署首 ...

  5. OpenStack源码系列---nova-compute

    nova-compute运行的节点为计算节点,虚拟机运行于计算节点上.例如对于创建虚拟机请求,nova-api接收到客户端请求后,经过nova-scheduler调度器调度,再将请求发送给某个选定的n ...

  6. (转)如何阅读OpenStack源码

    1 关于该项目 本项目使用在线绘图工具web sequencediagrams完成,目标是图形化OpenStack的所有操作流程,通过操作序列图能快速学习Openstack的工作原理,理清各个组件的关 ...

  7. Netty源码—一、server启动(1)

    Netty作为一个Java生态中的网络组件有着举足轻重的位置,各种开源中间件都使用Netty进行网络通信,比如Dubbo.RocketMQ.可以说Netty是对Java NIO的封装,比如ByteBu ...

  8. 11 hbase源码系列(十一)Put、Delete在服务端是如何处理

    hbase源码系列(十一)Put.Delete在服务端是如何处理?    在讲完之后HFile和HLog之后,今天我想分享是Put在Region Server经历些了什么?相信前面看了<HTab ...

  9. 9 hbase源码系列(九)StoreFile存储格式

    hbase源码系列(九)StoreFile存储格式    从这一章开始要讲Region Server这块的了,但是在讲Region Server这块之前得讲一下StoreFile,否则后面的不好讲下去 ...

随机推荐

  1. 编辑器sublime(转)摘自网络

    一.下载和安装 Sublime Text2是一款开源的软件,不需要注册即可使用(虽然没有注册会有弹窗,但是基本不影响使用). 下载地址:http://www.sublimetext.com/,请自行根 ...

  2. [android 应用框架api篇] bluetooth

    bluetooth接口 android.bluetooth.jar 官网网址: 接口类: https://developer.android.com/reference/android/bluetoo ...

  3. 【dp】leetcode Best Time to Buy and Sell Stock IV

    https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/description/ [题意] 给定n天股市的票价,最多交易k次, ...

  4. Java中NIO、BIO、AIO相关概念及应用场景

    1.同步阻塞IO(JAVA BIO):同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时,服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通 ...

  5. 仓库建设(bzoj 1096)

    Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天, ...

  6. UVa10234 Race

    递推,设有i个人排在第一名,剩下的人排在后面,方案有f[i]种,则f[i]=sum(c[n][i]*f[n-i]) 1<=i<=n /*by SilverN*/ #include<a ...

  7. form:form的一点体会

    留个日程吧,明个写,下班了>>

  8. Yii 之cookie的使用

    public function actionIndex(){ //设置cookie(注意这里用的是响应组件) $cookies = \YII::$app->response->cookie ...

  9. android实现通知栏消息

    一.原理 消息推送有两种,一种是客户端定时直接到服务器搜索消息,如果发现有新的消息,就获取消息下来:另一种是服务器向客户端发送消息,也就是当有信息消息时,服务器端就会向客户端发送消息. 二.步骤(代码 ...

  10. Docker安装运行Redis

    Mac环境 查询镜像: zhoumatoMBP:~ zhou$ docker search redis NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis ...