转载: Nova-Router 分析

以创建实例 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 继承关系图

时间: 2024-10-14 20:37:59

转载: Nova-Router 分析的相关文章

[转载] JaCoCo:分析单元测试覆盖率的利器

转载自http://www.ibm.com/developerworks/cn/java/j-lo-jacoco/和http://www.cnblogs.com/chenfengmugu/p/4937257.html 本文主要介绍了如何使用 JaCoCo 分析 Java 项目的单元测试覆盖率,同时介绍了如何在 Eclipse 中安装和使用 EclEMMA,让开发人员可以直观地看到单元测试的覆盖情况. 前言 随着敏捷开发的流行,编写单元测试已经成为业界共识.但如何来衡量单元测试的质量呢?有些管理者

[转载] TLS协议分析 与 现代加密通信协议设计

https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=timeline&isappinstalled=0 最近发现密码学很有意思,刚好还和工作有点关系,就研究了一下,本文是其中一部分笔记和一些思考. 密码学理论艰深,概念繁多,本人知识水平有限,错误难免,如果您发现错误,请务必指出,非常感谢! 本文禁止转载 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重

[转载] ConcurrentHashMap原理分析

转载自http://blog.csdn.net/liuzhengkang/article/details/2916620 集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在

openwrt<转载--openwrt框架分析 >

这次讲讲openwrt的结构. 1. 代码上来看有几个重要目录package, target, build_root, bin, dl.... ---build_dir/host目录是建立工具链时的临时目录 ---build_dir/toolchain-<arch>*是对应硬件的工具链的目录 ---staging_dir/toolchain-<arch>* 则是工具链的安装位置 ---target/Linux/<platform>目录里面是各个平台(arch)的相关代码

[转载]NGINX原理分析 之 SLAB分配机制

作者:邹祁峰 邮箱:[email protected] 博客:http://blog.csdn.net/qifengzou 日期:2013.09.15 23:19 转载请注明来自"祁峰"的CSDN博客 1 引言 众所周知,操作系统使用伙伴系统管理内存,不仅会造成大量的内存碎片,同时处理效率也较低下.SLAB是一种内存管理机制,其拥有较高的处理效率,同时也有效的避免内存碎片的产生,其核心思想是预分配.其按照SIZE对内存进行分类管理的,当申请一块大小为SIZE的内存时,分配器就从SIZE

转载:日志分析

MARK 日志分析: http://blog.csdn.net/pkueecser/article/details/9569251 大数据应用--系统监控与日志分析PPT http://wenku.baidu.com/link?url=8CJ-URMjVTVaw3GM1AZ2w9A7V0CIeRz3dx7xvysILLk6IdWpJGT889gQ7-824G4hAK-T2tdqZY1Lo6CEN1hgqHQNlHhVFykWJ_9XQW6EN5K ============= 日志在计算机系统中是

【转载】非线性分析中的ansys跟踪显示

原文地址:http://muchong.com/html/201209/4936556.html 在ansys output windows 有 force convergenge valu 值 和 criterion 值,当前者小于后者时,就完成一次收敛.非线性计算是一个迭代计算的过程,曲线表示两次迭代之间的误差,图中分别表示力和位移在迭代过程中的每次迭代之间的误差 两条线的意思分别是:F L2: 不平衡力的2范数F CRIT: 不平衡力的收敛容差,如果前者大于后者,说明没有收敛,要继续计算.

[转载]panic函数分析

在阅读协议栈代码(内核版本2.6.38),在很多地方都看到panic调用,只是知道大体功能,从未具体分析过,也一直想把协议栈的分析过程写下来,很懒,就一有写,算今天是个开始吧.分析panic太艰难啦,涉及的东西太多啦. /**  *    panic - halt the system  *    @fmt: The text string to print  *  *    Display a message, then perform cleanups.  *  *    This func

[转载]MATLAB代码分析优化加速

Profile(分析)在加速你的matlab程序之前,你需要知道你的代码哪一部分运行最慢.matlab提供个简单的机制,让你能够知道你的代码的某一部分运行所占用CPU时间.通过在代码段开始添加tic,及在结束添加toc:matlab就能计算出这一代码段的运行时间.Tic和toc方法存在两个问题:(1)显示的时间是运行时间“wall clock”.这个时间受你在运行你的代码时,你的计算机是否同时运行其它别的程序.(2)你需要不断地压缩计时范围来查找你代码运行最慢的位置.一个最好的方法是利用matl