summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-06-01 17:22:55 +0000
committerGerrit Code Review <review@openstack.org>2017-06-01 17:22:55 +0000
commitd67b33b2e5fcee4545fe4ccb1e58c8d6ed12883c (patch)
treed22df47d7c090646545f6d4aa52d0babae7f9d37
parent60c06d526c228de314ad659bda57c42750852ef9 (diff)
parentec76e254da4f4727463dcb3a76adf33e5d3f7ffb (diff)
downloadpython-glanceclient-2.7.0.tar.gz
Merge "Allow global_request_id in Client constructor"2.7.0
-rw-r--r--glanceclient/common/http.py9
-rw-r--r--glanceclient/tests/unit/test_http.py13
2 files changed, 22 insertions, 0 deletions
diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py
index c46b89b..da38613 100644
--- a/glanceclient/common/http.py
+++ b/glanceclient/common/http.py
@@ -40,6 +40,7 @@ osprofiler_web = importutils.try_import("osprofiler.web")
LOG = logging.getLogger(__name__)
USER_AGENT = 'python-glanceclient'
CHUNKSIZE = 1024 * 64 # 64kB
+REQ_ID_HEADER = 'X-OpenStack-Request-ID'
def encode_headers(headers):
@@ -130,6 +131,7 @@ class HTTPClient(_BaseHTTPClient):
self.identity_headers = kwargs.get('identity_headers')
self.auth_token = kwargs.get('token')
self.language_header = kwargs.get('language_header')
+ self.global_request_id = kwargs.get('global_request_id')
if self.identity_headers:
self.auth_token = self.identity_headers.pop('X-Auth-Token',
self.auth_token)
@@ -225,6 +227,9 @@ class HTTPClient(_BaseHTTPClient):
if not headers.get('X-Auth-Token'):
headers['X-Auth-Token'] = self.auth_token
+ if self.global_request_id:
+ headers.setdefault(REQ_ID_HEADER, self.global_request_id)
+
if osprofiler_web:
headers.update(osprofiler_web.get_trace_id_headers())
@@ -312,10 +317,14 @@ class SessionClient(adapter.Adapter, _BaseHTTPClient):
def __init__(self, session, **kwargs):
kwargs.setdefault('user_agent', USER_AGENT)
kwargs.setdefault('service_type', 'image')
+ self.global_request_id = kwargs.pop('global_request_id', None)
super(SessionClient, self).__init__(session, **kwargs)
def request(self, url, method, **kwargs):
headers = kwargs.pop('headers', {})
+ if self.global_request_id:
+ headers.setdefault(REQ_ID_HEADER, self.global_request_id)
+
kwargs['raise_exc'] = False
data = self._set_common_request_kwargs(headers, kwargs)
try:
diff --git a/glanceclient/tests/unit/test_http.py b/glanceclient/tests/unit/test_http.py
index ee82cf8..c57d5d4 100644
--- a/glanceclient/tests/unit/test_http.py
+++ b/glanceclient/tests/unit/test_http.py
@@ -15,6 +15,7 @@
import functools
import json
import logging
+import uuid
import fixtures
from keystoneauth1 import session
@@ -151,6 +152,18 @@ class TestClient(testtools.TestCase):
headers = self.mock.last_request.headers
self.assertEqual(kwargs['language_header'], headers['Accept-Language'])
+ def test_request_id_header_passed(self):
+ global_id = encodeutils.safe_encode("req-%s" % uuid.uuid4())
+ kwargs = {'global_request_id': global_id}
+ http_client = http.HTTPClient(self.endpoint, **kwargs)
+
+ path = '/v2/images/my-image'
+ self.mock.get(self.endpoint + path)
+ http_client.get(path)
+
+ headers = self.mock.last_request.headers
+ self.assertEqual(global_id, headers['X-OpenStack-Request-ID'])
+
def test_language_header_not_passed_no_language(self):
kwargs = {}
http_client = http.HTTPClient(self.endpoint, **kwargs)