查询一致性组详情的改进

https://blueprints.launchpad.net/cinder/+spec/improvement-to-query-consistency-group-detail

在查询一致性组详情时,如果存在卷,则返回卷 ID 列表。

问题描述

目前,查询一致性组详情不会返回该一致性组中存在的卷 ID 列表,最终用户不知道其中包含多少卷以及哪些卷。他们必须逐个查询卷详情以获取一致性组的 ID,并形成卷 ID 列表。这给用户体验带来了很大的不便。

用例

在将卷添加到一致性组后,最终用户希望在决定创建一致性组快照之前,知道一致性组中包含多少卷以及哪些卷。通过此功能,他们可以通过查询一致性组详情轻松获取此信息,并进行进一步调整,例如添加更多卷或从该一致性组中删除一些卷。

提议的变更

1. 如果用户需要这些卷的信息,则将卷 ID 列表添加到查询一致性组详情的响应体中。

2. 向 /volumes 添加 group_id 查询过滤器,以获取一致性组中的卷列表。例如“cinder list –group-id <CG 的 UUID>”。

注意:由于我们正在开发通用卷组[1],为了避免后续不必要的代码迁移,我们将首先实现 ‘group_id’ 查询过滤器,然后在通用卷组合并后,我们将根据通用组规范实现 #1 方法。

备选方案

数据模型影响

对于性能影响,如果我们想向 consistencygroup_id 列添加索引,则会对数据模型产生影响。

REST API 影响

  • 如果指定参数 ‘list_volume=True’,则将卷 ID 列表添加到查询 CG 详情的响应体中。这现在取决于通用组规范,因此仅在此处留下一个示例

GET /v3/{project_id}/consistencygroups/{consistency_group_id}?list_volume=True

RESP BODY

{"consistencygroup": {"status": "XXX",
                      "description": "XXX",
                      ...,
                      "volume_list":['volume_id1',
                                     ...,
                                     'volume_idn']
                      }
}
  • 在查询卷列表/详情的 URL 中添加过滤器 “group_id=xxx”

GET /v3/{project_id}/volumes?group_id=XXX

安全影响

通知影响

无。

其他最终用户影响

性能影响

如果用户没有使用 ‘list_volume=True’,则没有性能影响。我们只需要考虑添加额外的数据库查询来获取所有具有相同 CG ID 的卷 ID。因此,使用 ‘list_volume=True’ 时,性能影响应该很小。如果考虑大规模卷,我们可以向卷表的 consistencygroup_id 列添加索引以减少性能影响。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

wanghao<wanghao749@huawei.com>

工作项

  • 在数据库查询中实现代码并将列表添加到响应体中。

  • 更新 cinderclient 以支持此功能。

  • 更新 API 文档。

依赖项

测试

需要创建单元和 Tempest 测试来覆盖“Proposed change”中提到的代码更改。

文档影响

  1. Cinder API 文档需要更新以反映 REST API 的更改。

参考资料

[1]https://review.openstack.org/#/c/303893/