]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Import request_id middleware bug fix from oslo
authorChris Buccella <buccella@linux.vnet.ibm.com>
Wed, 26 Mar 2014 19:48:16 +0000 (19:48 +0000)
committerChris Buccella <buccella@linux.vnet.ibm.com>
Wed, 26 Mar 2014 19:52:38 +0000 (19:52 +0000)
There is a bug in request-id middleware that a subsequent API request
will overwrite a request-id of a previous request when multiple API
calls are processed in parallel in request_id middleware. The fix is
a drop-in replacement; cinder code does not need to be modified to
use the updated request_id middleware.

oslo change to fix the middleware:
d7bd9dc37ac3d6bc171cd2e290c772633ad20a32

Closes-Bug: #1289696
Change-Id: Ib211318c47681f841bcde04e490ccc2070bdf8de

cinder/openstack/common/middleware/request_id.py

index 53d9813b0048a2a9471378a80f5ba28bc99cb3e8..e7e415776489f12805e3643230e2327f3f7ed0f0 100644 (file)
@@ -19,6 +19,8 @@ It ensures to assign request ID for each API request and set it to
 request environment. The request ID is also added to API response.
 """
 
+import webob.dec
+
 from cinder.openstack.common import context
 from cinder.openstack.common.middleware import base
 
@@ -29,10 +31,11 @@ HTTP_RESP_HEADER_REQUEST_ID = 'x-openstack-request-id'
 
 class RequestIdMiddleware(base.Middleware):
 
-    def process_request(self, req):
-        self.req_id = context.generate_request_id()
-        req.environ[ENV_REQUEST_ID] = self.req_id
-
-    def process_response(self, response):
-        response.headers.add(HTTP_RESP_HEADER_REQUEST_ID, self.req_id)
+    @webob.dec.wsgify
+    def __call__(self, req):
+        req_id = context.generate_request_id()
+        req.environ[ENV_REQUEST_ID] = req_id
+        response = req.get_response(self.application)
+        if HTTP_RESP_HEADER_REQUEST_ID not in response.headers:
+            response.headers.add(HTTP_RESP_HEADER_REQUEST_ID, req_id)
         return response