使用 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 更改),因此不应该因为这个原因而推迟这项工作。

参考资料

历史

修订版

发布名称

描述

Pike

引入