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
工作项¶
同步 oslo 中的 request_id 中间件(完成)
使用 request_id 中间件将 x-openstack-request-id 添加到 api-paste.ini 中的 v3 管道
编写中间件以附加 x-compute-request-id。仅将此添加到 v2 管道。
删除 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