Import request_id middleware bug fix from oslo

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
This commit is contained in:
Chris Buccella 2014-03-26 19:48:16 +00:00
parent 532e99589b
commit b5f7cf989c
1 changed files with 9 additions and 6 deletions

View 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