持久化 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 文档,解释用于调度的此数据的存在。
参考资料¶
无