API v3: 添加 x-openstack-request-id 头

https://blueprints.launchpad.net/nova/+spec/cross-service-request-id

各种 OpenStack 服务正在标准化一个通用的头名称来用于请求 ID:x-openstack-request-id。Nova 当前使用头 x-compute-request-id。

问题描述

nova 发送请求 ID 作为 x-compute-request-id。其他服务(cinder、glance、neutron)发送 x-openstack-request-id。

提议的变更

在处理 nova 的 v3 请求时,使用 x-openstack-request-id。oslo 中已经存在中间件来生成 ID 并将头附加到响应中。

备选方案

当前的方法——保留现有的头名称——是另一种选择。这将延续 OpenStack 服务之间头名称的不连续性。

另一种选择是在 v2 和 v3 中都包含新的头名称。但这样做的好处不足以证明修改现有 API 的行为是合理的。

数据模型影响

无。

REST API 影响

此更改将向 HTTP 响应添加一个新的头。新的头 x-openstack-request-id 将与 x-compute-request-id 具有相同的值。在实现此蓝图后,v2 将继续返回 x-compute-request-id。对于 v3,将仅返回 x-openstack-request-id。

安全影响

无。

通知影响

无。

其他最终用户影响

使用 v3 API 发送请求的用户将仅接收新的头 x-openstack-request-id。python-novaclient 在报告 HTTPError 时使用 x-compute-request-id(如果存在);在使用 v3 时,需要更新它以使用新的头名称。其他从 v2 迁移到 v3 的客户端需要考虑头名称的更改。

性能影响

无。

其他部署者影响

此更改具有升级影响,因为它依赖于在 api-paste.ini 中向管道添加中间件。由于中间件正在接管将头附加到响应的任务,因此不更新 api-paste.ini 将导致响应在没有 x-openstack-request-id 头的情况下返回。此外,在使用 v2 API 时,x-compute-request-id 头也将丢失。其影响将是 novaclient 的错误输出中缺少请求 ID 信息,如前一节所述。

开发人员影响

无。

实现

负责人

chris-buccella

工作项

  1. 同步 oslo 中的 request_id 中间件(完成)

  2. 使用 request_id 中间件将 x-openstack-request-id 添加到 api-paste.ini 中的 v3 管道

  3. 编写中间件以附加 x-compute-request-id。仅将此添加到 v2 管道。

  4. 删除 api/openstack/wsgi.py 中现有的 x-compute-request-id 头操作代码

依赖项

无。

测试

由于头名称的更改,api/compute/v3/servers/test_instance_actions 将受到影响,因为它引用了当前的头名称。我们已经为此设置了一个跳过,并在完成此蓝图后更新测试以使用新的名称。

文档影响

API 的 v3 响应将仅包含 x-openstack-request-id,不包含 x-compute-request-id。

参考资料

HK Summit 的讨论:https://etherpad.openstack.org/p/icehouse-summit-nova-cross-project-request-ids

ML 的改进:http://lists.openstack.org/pipermail/openstack-dev/2013-December/020774.html

现有更改:https://review.openstack.org/#/c/66903/