支持按变更时间之前查询 nova 资源¶
https://blueprints.launchpad.net/nova/+spec/support-to-query-nova-resources-filter-by-changes-before
计算 API 已经有了 changes-since 过滤器,用于过滤给定时间后更新的服务器,本规范建议添加一个 changes-before 过滤器,用于过滤给定时间前更新的服务器。 此外,这些过滤器可以结合使用,构建一种时间范围过滤器,例如获取 nova 资源在 changes-since 和 changes-before 之间。
问题描述¶
默认情况下,nova 可以查询 updated_at >= changes-since 时间段内的实例资源。 用户只能查询在给定时间操作的资源,而不能在给定时间段内查询。 用户可能对在特定时间段内操作的资源感兴趣,用于监控或统计目的,但目前他们必须自行检索和过滤资源。 此更改可以为用户带来便利,并提高基于时间戳的查询效率。
用例¶
在大型环境中,系统中创建了大量的资源。 为了追踪资源的变更,用户或管理系统只需要获取在某个时间段内发生变更的资源,而不是每次查询所有资源来查看哪些发生了变更。
例如,如果您尝试获取在 ‘2018-07-26T10:31:49Z’ 之前发生变更的 nova 资源,您可以像这样过滤服务器:
GET /servers/detail?changes-before=2018-07-26T10:31:49Z
或者,如果您想过滤在时间范围内的服务器(例如 changes-since= 2018-07-26T10:31:49Z -> changes-before=2018-07-30T10:31:49Z),您可以像这样过滤服务器:
GET /servers/detail?changes-since=2018-07-26T10:31:49Z&changes-before= 2018-07-30T10:31:49Z
提议的变更¶
为 os-instance-actions、os-migrations 和服务器列表 API 添加一个新的微版本以支持 changes-before。
引入一个新的 changes-before 过滤器来检索资源。 它接受一个时间戳,项目将返回 updated_at 字段早于此时间戳的资源,这意味着 “updated_at <= changes-before”。 它的值是可选的。 如果同时传递 changes-since 和 changes-before 的值,项目将返回 updated_at 字段早于或等于 changes-before,且晚于或等于 changes-since 的资源。
读取已删除的资源
与 changes-since 过滤器一样,changes-before 过滤器也会返回已删除的服务器。
本规范不建议更改 os-instance-actions 或 os-migrations API 中的任何读取已删除行为。 具有 2.21 微版本的 os-instance-actions API 允许检索已删除服务器资源的实例操作。 os-migrations API 接受一个可选的 instance_uuid 过滤器参数,但不像服务器 API 中的 changes-since 那样支持返回已删除的迁移记录。
备选方案¶
如 问题描述 部分所述,用户可以自行检索和过滤资源,但这种方法非常不方便。 话虽如此,确实存在类似 Searchlight 的服务,它们具有类似的功能,即侦听 nova 通知并将它们存储在 Elasticsearch 等时间序列数据库中,然后可以稍后查询结果。 然而,对于这个相对较小的更改,要求使用 Searchlight 或类似的替代解决方案可能过于繁重。 将过滤工作交给数据库可以利用数据库引擎的优化,并减少从服务器到客户端传输的数据量。
数据模型影响¶
无
REST API 影响¶
将添加一个新的微版本。
列表 API 将接受新的查询字符串参数 changes-before。 根据以下情况判断:
如果用户指定 changes-before < changes-since,将返回 HTTPBadRequest 400。
如果用户仅指定 changes-before,将返回所有在 changes-before 之前的 nova 资源,包括已删除的服务器。
如果用户指定 changes-since 和 changes-before,将获取特定时间段内的变更,包括已删除的服务器。
当用户仅指定 changes-since 时,原始功能保持不变。
用户可以将时间传递给列表 API url 以检索在特定时间操作的资源。
GET /servers?changes-before=2018-07-26T10:31:49Z
GET /servers/detail?changes-before=2018-07-26T10:31:49Z
GET /servers/{server_id}/os-instance-actions?changes-before= 2018-07-26T10:31:49Z
GET /os-migrations?changes-before=2018-07-26T10:31:49Z
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
Python 客户端可以添加帮助信息,告知用户此新过滤器。 为 ‘nova list’、’nova migration-list’ 和 ‘nova instance-action-list’ 命令在 python-novaclient 中添加对 changes-before 过滤器的支持。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
张斌
工作项¶
在 sql 中添加查询支持
添加 API 过滤器
添加相关测试
为 novaclient 的 ‘nova list’ 操作添加对 changes-before 的支持
为 novaclient 的 ‘nova instance-action-list’ 添加对 changes-before 的支持
为 novaclient 的 ‘nova migration-list’ 添加对 changes-before 的支持
依赖项¶
无
测试¶
添加相关单元测试
添加相关功能测试
文档影响¶
nova API 文档需要更新以反映 REST API 的更改,并添加微版本说明。
参考资料¶
无
历史¶
发布名称 |
描述 |
|---|---|
Stein |
引入 |