common library in nova (1)

 

本文转载至www.x9byod.com

 

nova中把通用的功能模块放在openstack/common下,实现了很多基本的常用功能,比如log,time,包引用等等;这个模块与其它模块高度独立,因此可以被很容易的被各个模块,甚至其它工程复用。这里介绍openstack比较常用和重要的几个模块:

  • db

nova数据库默认采用的后台是sqlalchemy,common/db实现了抽象的DBAPI类,所有对数据库的操作都通过DBAPI来代理。DBAPI只是一个简单的wrapper,真正的实现由它的初始话参数backend_mapping来决定。nova里采用的默认值为“{‘sqlalchemy’: ‘nova.db.sqlalchemy.api’}”,也就是说,db的后台实现在目录nova/db/sqlalchemy下。nova.db.sqlalchemy.api中实现了所有对数据库操作函数的封装,任何一个对数据库状态有修改的函数,都可以在这里找到对应的数据库更新函数。数据库的表定义在nova.db.sqlalchemy.models中。

  • log

nova的log可以认为是对python标准库里logging函数的封装和增强。它根据配置文件,对输出的内容,级别,格式以及输出目的进行控制。同时,配合gettextutils模块,log还支持多语言的数据

  • gettextutils

是对gettext工具的封装,用来提供多语言的输出。典型用法也是通过_(“index message id”)来提供不同语言的输出。gettextutils提供两种模式,如果用普通模式(非lasy),会调用gettext模块中translation的ugettext直接翻译输出。如果用lazy模式,_会返回一个Message对象,只有在访问Message对象的str或者unicode方法时,才会从po文件里查找对应的翻译内容。

  • service

简单说就是把函数或者可执行程序放在后台执行。服务有launch函数启动,有两种启动方式:一是直接在thread里执行,另一个是创建子进程执行。nova中service的实现在nova.service中,由cmd下的all.py来启动对应的服务。启动过程首先创建service或者wsgi_service,wsgi_service由对应的manager启动,service除了manager外,还实现了rpc的接口,用来相应远程命令的实现。nova-compute’, ‘nova-network’, ‘nova-scheduler’都属于Service,’ec2′属于wsgi_service。

  • periodic_task

nova在运行时需要很多定时任务,例如检查vm状态,更新节点信息等等。periodic_task是用来简化nova中定时任务的处理,通过periodic_task我们不必为每一个任务写一个单独的定时器进行调度。periodic_task的核心是一个decorator,一个metaclass,一个定时任务的基类。
periodic_task.periodic_task是decorator,它为函数设置必要的属性(例如定时间隔,执行时间等),保存在函数的属性中(函数也是对象);PeriodicTasks是定时任务的基类,它的run_periodic_tasks函数会在定时器到达时,检查并执行所有需要被执行的成员函数。而_PeriodicTasksMeta作为PeriodicTasks的metaclass,在生成PeriodicTasks类时,会把所有需要定时执行的成员函数(PeriodicTasks中被periodic_task decorated的成员函数)保存到数组_periodic_tasks中。而run_periodic_tasks函数就是在这个数组中进行检查的。

 

待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: exe_common.inl引发异常是指在程序运行过程中,执行到exe_common.inl这个文件时出现了异常。这可能是由于程序代码中的错误、内存泄漏、系统资源不足等原因引起的。需要对程序进行调试和排查,找出异常的具体原因并进行修复。 ### 回答2: exe_common.inl引发异常是一种错误,通常在使用C++编程语言时会出现。这个错误可能是由于代码中出现了某种问题导致的,如指针访问不当、内存泄漏、类型不匹配等错误都可能导致这个错误。此外,由于C++是一种底层语言,所以程序员需要手动管理内存,导致不当的内存管理也会导致此问题的出现。 出现exe_common.inl引发异常错误时,程序通常会停止运行并无法正常使用,这可能导致给用户带来一定的困扰。为了解决此问题,程序员需要先找出引发异常的根本原因,并修正代码中的问题。在重新编译程序之前,程序员应该确保代码中没有逻辑缺陷,尤其是内存管理问题。如果发现问题无法解决,程序员可以寻求其他人的帮助或者找到类似的代码示例进行对比,以便找出问题所在。 总之,exe_common.inl引发异常是一种常见的C++编程语言中出现的错误,但是程序员可以通过仔细检查代码和遵守良好的编程习惯来避免此类错误的出现。如果需要大量的内存管理工作,推荐使用现代的编程语言,如java、python等,这些编程语言通常具有更高水平的内存管理能力,安全而且稳定。 ### 回答3: exe_common.inl引发异常通常是由于程序在执行某些操作时出现问题,这种问题往往是由各种因素引起的。在程序运行期间,操作系统会对其所使用的内存空间进行检查,以确保程序没有访问到非法的内存位置,避免出现异常情况。当程序访问到非法的内存位置时,系统会抛出异常。 exe_common.inl是一个C++的头文件,它通常包含了一些程序通用的函数和类,这些函数和类可以在多个地方使用。如果在程序执行期间,exe_common.inl文件中的某个函数或类出现了异常,那么程序就会因为不能正确执行它们而出现问题。 解决exe_common.inl引发异常问题需要针对具体情况进行分析和调试。首先,需要查看程序的崩溃日志,寻找异常发生的原因。在日志中,可以查看程序所访问的内存位置及函数调用栈等信息,以定位异常发生位置。然后,可以针对具体问题对程序进行修正,比如添加异常处理代码、改变内存访问方式或者检查程序中可能引起异常的位置等。 总之,对于exe_common.inl引发的异常问题,需要通过详细的调试和排查,才能找到根本原因,并进行修正和改进,以避免类似问题再次发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值