读书人

【openstack】Quantum讯息处理流程简析

发布时间: 2013-11-08 17:52:35 作者: rapoo

【openstack】Quantum消息处理流程简析

Quantum消息处理流程

1????? Paste.deploy配置


【openstack】Quantum讯息处理流程简析

2????? authtoken

调用kestone进行鉴权。

3????? keystonecontext

根据鉴权信息(user_id,tenant_id,roles等),更新请求中的环境上下文。
【openstack】Quantum讯息处理流程简析

4????? extensions


?则加载ext_db_models表示的数据库建模类


?类ExtensionManager初始化主要是加载扩展类目录中的扩展类,代码解析如下:
【openstack】Quantum讯息处理流程简析
?5)???? 初始化ExtensionMiddleware

整个初始化过程主要使用从Ruby移植到Python的Routes开发包,用来定义URL和应用程序接口之间的映射,这里不是很懂,网上关于Routes的资料除了官方文档外几乎没有。

?

def __init__(self, application,                 ext_mgr=None):        self.ext_mgr = (ext_mgr                        or ExtensionManager(                        get_extensions_path()))        # 定义mapper        mapper = routes.Mapper()        # extended resources        for resource in self.ext_mgr.get_resources():            LOG.debug(_('Extended resource: %s'),                      resource.collection)            for action, method in resource.collection_actions.iteritems():                path_prefix = ""                parent = resource.parent                conditions = dict(method=[method])                path = "/%s/%s" % (resource.collection, action)                if parent:                    path_prefix = "/%s/{%s_id}" % (parent["collection_name"],                                                   parent["member_name"])                with mapper.submapper(controller=resource.controller,                                      action=action,                                      path_prefix=path_prefix,                                      conditions=conditions) as submap:                    submap.connect(path)                    submap.connect("%s.:(format)" % path)            mapper.resource(resource.collection, resource.collection,                            controller=resource.controller,                            member=resource.member_actions,                            parent_resource=resource.parent)        # extended actions        action_controllers = self._action_ext_controllers(application,                                                          self.ext_mgr, mapper)        for action in self.ext_mgr.get_actions():            LOG.debug(_('Extended action: %s'), action.action_name)            controller = action_controllers[action.collection]            controller.add_action(action.action_name, action.handler)        # extended requests        req_controllers = self._request_ext_controllers(application,                                                        self.ext_mgr, mapper)        for request_ext in self.ext_mgr.get_request_extensions():            LOG.debug(_('Extended request: %s'), request_ext.key)            controller = req_controllers[request_ext.key]            controller.add_handler(request_ext.handler)        # 个人理解,开始根据Mapper解析URL,_dispatch()方法根据解析的结果进行处理        self._router = routes.middleware.RoutesMiddleware(self._dispatch,                                                          mapper)        super(ExtensionMiddleware, self).__init__(application)

??

对于每一个资源的处理是在quantum/api/v2/base.py/Controller类中

5????? quantumapiapp_v2_0

处理类:quantum/api/v2/router.py::APIRouter类

初始化:

self._router = routes.middleware.RoutesMiddleware(self._dispatch, self.map)

?

?

读书人网 >开源软件

热点推荐