使用 oslo.middleware request_id¶
https://blueprints.launchpad.net/nova/+spec/oslo-middleware-request-id
使 Nova 与 OpenStack 的其余部分在 request_id 处理上保持一致,这意味着 global_request_id 也适用于 Nova。
问题描述¶
Nova 拥有 oslo.middleware RequestId 中间件的复制粘贴版本,因为这段代码最初是在 Nova 中使用返回头 X-Compute-Request-ID 编写的,然后随着 X-OpenStack-Request-ID 一起迁移到 oslo。Nova 从未迁移到该中间件。
该中间件现在具有接受和验证传入 request_id 的逻辑。我们希望在整个 OpenStack 中保持一致,因此为了使 Nova 作为被调用者参与 global_request_id 支持,它需要在此中间件上。
添加此中间件意味着 Nova 现在将返回额外的 X-OpenStack-Request-ID 头。这需要根据我们的规则进行微版本更新。
用例¶
作为调用 Nova 的应用程序,我希望能够使用应用程序提供的 global_request_id 跟踪我的请求,这易于在所有服务日志中搜索。
提议的变更¶
将 ComputeReqIdMiddleware 修改为继承自 oslo_middleware.request_id.RequestId。
更新依赖项以需要 oslo.middleware >= 3.27.0。
更新微版本。这是一个仅用于信号的微版本,request_id 生成和处理发生在远远早于我们在 paste 管道中处理微版本之前。将头作为微版本条件化不可行,因为它需要完全重新架构请求处理流程。
备选方案¶
不支持 global_request_id。
数据模型影响¶
无。
REST API 影响¶
在此更改后,将返回一个额外的 HTTP 头 X-OpenStack-Request-ID。该值将与现有的 X-Compute-Request-ID 相同。
没有计划删除 X-Compute-Request-ID。
安全影响¶
无。
通知影响¶
无。
其他最终用户影响¶
无。
性能影响¶
无。
其他部署者影响¶
无。
开发人员影响¶
无。
实现¶
负责人¶
主要负责人:sdague
工作项¶
更改 Nova 的 ComputeRequestIdMiddleware
依赖项¶
oslo.middleware 中兼容头部的更改,这些更改已在 3.27.0 中落地。
测试¶
oslo.middleware 测试任何兼容头部的的值与
X-OpenStack-Request-ID头相同。Tempest 已经测试了来自 Nova 命令的
X-Compute-Request-ID。因此,我们是间接测试的。如果有人坚持,可以根据微版本添加一个针对新头的 Tempest 测试,但这可能有点过头。
文档影响¶
api-ref 目前还没有讨论任何这些头部。将来应该更改它,但是由于它当前没有记录(并且为了有效地记录它需要进行一些 os-api-ref 更改),因此不应该因为这个原因而推迟这项工作。
参考资料¶
oslo request_id 规范 - https://specs.openstack.org/openstack/oslo-specs/specs/pike/global-req-id.html
v3 的先前实现 - 似乎在 v2.1 拆除时被意外撤销 - https://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/cross-service-request-id.html
历史¶
发布名称 |
描述 |
|---|---|
Pike |
引入 |