common library in nova (1)
2013-09-09 15:42
489 查看
本文转载至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函数就是在这个数组中进行检查的。
待续
相关文章推荐
- common library in nova (1
- unbound classpath container:'JRE System Library [jre1.6.0_11]' in project '工程名'
- unable to load native-hadoop library for your platform using builtin-java classes
- Swift Standard Library: Documented and undocumented built-in functions in the Swift standard library – the complete list with all 74 functions
- Advanced Programming in Unix Environment -- Standard I/O Library
- 导入项目后 出现Unbound classpath container: 'JRE System Library [jdk1.6.0_04]' in project '项目名'这样的错误
- eclipse maven error: Archive for required library in project cannot be read or is not a valid ZIP 问题
- git: No refs in common and none specified; doing no
- 项目检出JRE问题(Unbound classpath container: 'JRE System Library [JavaSE-1.7]' in project 'idweb')
- What Do WebLogic, WebSphere, JBoss, Jenkins, OpenNMS, and Your Application Have in Common?
- 关于Use MFC in a Shared DLL和Use MFC in a Static Library 转换遇到的问题
- Skia graphics library in Chrome
- Tomcat5.5启动时提示“The Apache Tomcat Native library which allows optimal performance in production environments was not found”
- java.lang.UnsatisfiedLinkError: no jacob in java.library.path
- This version of the rendering library is more recent than your version of ADT plug-in. Please update
- Setting static library in Eclipse C++ in Linux
- No tag "datetimepicker" defined in tag library imported with prefix "s"解决
- proguard.ParseException: Expecting keyword 'class', 'interface', or 'enum' before '-libraryjars' in
- Swift Standard Library: Documented and undocumented built-in functions in the Swift standard libr...
- C++ Gotchas: Avoiding Common Problems in Coding and Design