使用 oslo-versioned-objects 来帮助处理升级。

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/heat/+spec/versioned-objects

问题描述

我们希望改进处理版本控制的方式(包括各种数据库/RPC/REST/模板/插件)。Nova 提出了版本化对象(versioned objects)的想法,Ironic 也已经使用了它。现在这已被提议作为 oslo 库:https://review.openstack.org/#/c/127532/

https://etherpad.openstack.org/p/kilo-crossproject-upgrades-and-versioning

版本化对象将帮助我们处理数据库模式与代码期望的版本不一致的情况。这将允许 Heat 在升级期间安全运行。

展望未来,随着我们通过 RPC 传递越来越多的数据,我们可以利用版本化对象来确保升级发生时,不会将版本依赖代码分散到代码库中。

提议的变更

由于版本化对象进入 oslo 库还需要一些时间,因此计划先为 Heat 获取一个早期版本,并在准备好时过渡到 oslo-versioned-objects。

创建一个目录 heat/objects/,其中包含位于数据库对象之上的包装对象。这使得 Heat 的其余部分无需担心处理旧的数据库对象。

对象就位后,其余代码将被更改为使用版本化对象,而不是直接使用 db_api。可以逐个对象地完成此操作,以避免过大的更改。

备选方案

数据模型影响

无。引入的对象不会存储在数据库中。相反,这些对象是用于表示 Heat 内部堆栈、资源等 sqlalchemy 对象的替代品。

开发人员影响

将 Heat 内部转换为对象模型需要一些时间,因此在所有对象模型就位之前,应接受直接数据库调用的现有约定。

实现

负责人

主要负责人

Angus Salkeld <asalkeld@mirantis.com> <欢迎其他人提供帮助>

里程碑

完成目标里程碑

Kilo-2

工作项

  • (如果需要) 获取 oslo.versionedobjects 的早期版本。

  • 为我们拥有的每种数据库对象类型实现对象。

  • 更新使用数据库的代码,以使用版本化对象代替。

  • 编写一些开发者文档,介绍如何处理旧模式。

  • 一旦可用,立即过渡到 oslo-versioned-objects。

依赖项

  • oslo-versioned-objects