zoukankan      html  css  js  c++  java
  • 转载: Nova-Router 分析

    很早的实现了,nova代码已经做了很多修改了。

    以创建实例 URL(http://10.191.7.32:8773/v1.1/service?*****)为例说明 Router 的执行流程

    1. 依据 python 的 pater.deploy 模块的语法规则,利用 Nova 的 apt-paste 文件,将该 URL 依次通过“faultwrap noauth ratelimit extensions osapiapp11”执行,本例分析 URL 在 osapiapp11 的执行流程,其他只 是对 URL 进行过滤操作。

    2. osapiapp11 对应的类 nova.api.openstack:APIRouterV11,该类的继承关 系图如下

     

    3 代码执行流程

    3.1 初始化

    a.osapiapp11 会调用类○3 中的 factory()函数,该函数由继承父类○2 而来。

    b. 类○3 factory()调用自身的构造函数, __init__()函数该函数由 继承父类○2 而来。

    c.类○3 __init__()函数调用自身实现的_setup_routes()函数,建立 URL 映射表 mapper。

    d. _setup_routes()首先调用_setup_base_routes()函数建立基 础映射,该函数由类○3 从父类○2 继承而来。

    e._setup_base_routes()建立基础映射,并调用 super(APIRouter, self).__init__(mapper),即调用类○1 的__init__()函数。

    f. 完成类○3 初始化

    nova.wsgi.Router()○1

    nova.api.openstack.APIRouter()○2

    nova.api.openstack.APIRouterV10()

    nova.api.openstack.APIRouterV11()○3

    3.2 执行 URL 映射(根据例子中的 URL)

    a. 调用类○3 __call__()函数,该函数继承自类○1

    b. __call__()调用 routes.middleware.RoutesMiddleware,完成 URL 到 Contoller 的映射。映射的 controller 为 servers.create_resource(version)。 c. servers.create_resource(version) 函 数 调 用 的 为 nova.api.openstack.servers.py 模块中的 create_resource 函数。该类通过调 用函数 wsgi.Resource(controller, deserializer, serializer) , 实 例 化 nova.api.wsgi.Resouce()类作为 controller 对 象。该对象包含了一个 controller 属性,该属性为 nova.api.openstack.serveric. ControllerV11 类的 实例。

    d. 调用上步中实例化对象的__call__函数完成 URL 的执行。即调用 nova.api.wsgi.Resouce()的__call__函数。

    e. 该函数调用 self.deserializer.deserialize(request)获取请求的 action 字符串。然后调用自身的 dispatch 函数从 controller 中获取相关函数并调 用执行。

    f. 即从 nova.api.openstack.servers. ControllerV11 类中调用 create() 函数,该函数继承自该类的基类 Controller。

    g. create 通过调用 self.compute_api.create 完成对 URL 操作。

    nova.api  controller 继承关系图

  • 相关阅读:
    python-杂烩
    24 Python 对象进阶
    23 Python 面向对象
    22 Python 模块与包
    21 Python 异常处理
    20 Python 常用模块
    18 Python 模块引入
    2 Python 基本语法
    1 Python 环境搭建
    3 Python os 文件和目录
  • 原文地址:https://www.cnblogs.com/shaohef/p/4884221.html
Copyright © 2011-2022 走看看