支持按变更时间之前查询 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

引入