持久化 RequestSpec 对象

https://blueprints.launchpad.net/nova/+spec/persist-request-spec

持久化用于调度实例的 RequestSpec 对象。

问题描述

在调整大小/迁移期间,在某些情况下,需要访问最初用于调度实例的 RequestSpec,而此时它可能不可用。为了使后续调度请求在与原始请求相同的约束条件下运行,我们应该为这些后续调度调用保留 RequestSpec。

随着 Cells 的发展,在创建实例之前存储 RequestSpec 将是必要的,以便 API 可以在实例被调度之前返回实例的详细信息。

用例

  • 操作员/用户希望通过迁移或调整大小来移动实例,并希望目标满足与源相同的要求。

项目优先级

Liberty 的优先级尚未确定。

提议的变更

将在 RequestSpec 对象中添加一个 save() 方法。这将把 RequestSpec 存储在数据库中。由于这也与 Cells 工作相关,因此可以将它存储在 API 和常规 Nova 数据库中。save() 存储在哪个数据库中将由使用的上下文决定。

备选方案

其中一部分可以放入 instance_extra 表中。由于稍后它将在调度之前持久化到 API 数据库中,然后在调度后移动到 Cell 数据库中,因此将其存储在两个数据库中都存在的表中是有益的。

数据模型影响

将在 API 和 Cell 数据库中添加一个新的数据库表。模式将匹配存储 RequestSpec 对象所需的内容。由于它尚未实现,因此在这里最终确定设计用处不大。

REST API 影响

安全影响

通知影响

其他最终用户影响

这里没有,但这将允许像原始启动请求一样调度调整大小操作。

性能影响

将会产生额外的数据库写入操作。

其他部署者影响

与用户相同,这里也没有,但这为未来的更改打开了大门。

开发人员影响

实现

负责人

主要负责人

alaski

工作项

  • 在 API 和 Cell/当前数据库中添加一个新表

  • 在 RequestSpec 对象中添加 save() 方法

  • 在适当的位置调用代码中的 save() 方法

依赖项

https://blueprints.launchpad.net/nova/+spec/request-spec-object

测试

将添加新的单元测试。这并非以 Tempest 可以测试的方式对外暴露。

文档影响

将添加 Devref 文档,解释用于调度的此数据的存在。

参考资料