跳转到: 导航, 搜索

Notifier-in-openstack-common

Warning.svg 旧设计页面

此页面曾用于帮助设计 OpenStack 之前版本的一个特性。它可能已经被实现,也可能没有。因此,此页面可能不会被更新,并且可能包含过时的信息。上次更新时间为 2013-12-12

  • Launchpad 条目: notifier-in-openstack-common
  • 创建时间: 2012年4月6日
  • 贡献者:

总结

目前 glance 和 nova 都有独立的 notifier 模块来处理通知。Nova 和 glance 的设计也相似,它们使用通用的接口发送通知,并具有特定的实现来处理日志、rabbit、列表和无操作通知。这里的意图是将 notifier 模块移动到 openstack-common,以便 nova 和 glance 可以使用相同的代码库。以下是完成此操作的步骤,概括如下:

1. 确定通知的通用接口

2. 将代码移动到 openstack-common

3. 修改 nova 和 glance 中的代码,以使用 openstack-common 进行通知

发布说明

原理

这将有助于消除重复代码和代码重用。

用户故事

前提条件

设计

Notifier.png

如图类图所示,notifier 将根据配置使用特定的策略来发送通知。构造函数将传递一个配置对象,该对象将由策略用于读取相关信息。

实现

计划重用 nova notifier 模块中当前存在的大部分代码。以下是对现有代码和依赖关系的分析:

  • notifier 和 rpc 使用 flags、utils、logging、context、db、exception,来自 nova。notifier 和 rpc 中的模块使用来自 flags.py 的 FLAGS,它是 NovaConfigOpts 的一个实例。它们主要用于注册配置选项并访问它们。鉴于我们可以直接使用 CommonConfigOpts 来注册选项,这将消除对 flags 和标志文件的依赖。
  • utils 中使用了三个函数 - utcnow、import_object 和 to_primitive。openstack-common 中有一个 utils,其中已经包含 utcnow 和 import_object。代码也与 nova 中的实现逐行匹配。to_primitive 函数在 openstack-common 中缺失。可以将此函数移动到 openstack-common,这将消除对基于 nova 的 utils 的依赖。
  • notifier 和 api 使用来自 nova 的 log。事实上,它们与 NovaContextAdapter 的一个实例一起工作,而 NovaContextAdapter 又是 LoggerAdapter 的一个实例。NovaContextAdapter 用于将上下文、实例 UUID 和 nova 版本传递给 logger。openstack-common 中的模块直接使用 python logging 模块。因此,如果我们需要 notifier 能够打印上下文信息,我们将不得不将此功能添加到 openstack-common。
  • nova 和 openstack-common 都有 RequestContext 的实现。Nova 中的那个更丰富,notifier 和 rpc 都使用来自 nova 中的 RequestContext 的功能。另一个区别是 nova 中的 RequestContext 使用弱引用存储来保存上下文信息。有几个实例从存储中删除了上下文信息,但没有实例访问存储。openstack-common 中已经有一个 local 的实现 (http://review.openstack.org/5464),这将使这更容易。
  • nova 中的 db 仅由 capacity_notifier 使用。它发送仅与计算管理器事件相关的事件。将 capacity_notifier 保留在 nova 中可能更有意义。

nova 中的 notifier 使用 nova 特定的异常,这些异常将被更改为使用 openstack-common 中的异常。

测试/演示计划

未解决的问题

BoF 议程和讨论