summaryrefslogtreecommitdiff
path: root/oslo_context
diff options
context:
space:
mode:
authorSean Dague <sean@dague.net>2017-05-14 07:14:25 -0400
committerSean Dague <sean@dague.net>2017-05-23 10:22:34 -0400
commitec7cdc4cc560150673f14c84a326f6a72d43d3e1 (patch)
treefa536aaad817159eb090f8823863be5c3fc72883 /oslo_context
parent68b0476999cb240a450e3cb6289e1eb9caa7b063 (diff)
downloadoslo-context-ec7cdc4cc560150673f14c84a326f6a72d43d3e1.tar.gz
Add global_request_id to context
This provides the facility to have a global_request_id which is different from the service level request_id that we've been using. Includes basic testing. Change-Id: I1521188ae627fa2e7d35aa2ffffbcb620c527765
Diffstat (limited to 'oslo_context')
-rw-r--r--oslo_context/context.py7
-rw-r--r--oslo_context/tests/test_context.py14
2 files changed, 20 insertions, 1 deletions
diff --git a/oslo_context/context.py b/oslo_context/context.py
index 945cb82..c253b32 100644
--- a/oslo_context/context.py
+++ b/oslo_context/context.py
@@ -55,6 +55,7 @@ _ENVIRON_HEADERS = {
'user_domain_name': ['HTTP_X_USER_DOMAIN_NAME'],
'project_domain_name': ['HTTP_X_PROJECT_DOMAIN_NAME'],
'request_id': ['openstack.request_id'],
+ 'global_request_id': ['openstack.global_request_id'],
'service_token': ['HTTP_X_SERVICE_TOKEN'],
@@ -208,7 +209,8 @@ class RequestContext(object):
service_project_name=None,
service_project_domain_id=None,
service_project_domain_name=None,
- service_roles=None):
+ service_roles=None,
+ global_request_id=None):
"""Initialize the RequestContext
:param overwrite: Set to False to ensure that the greenthread local
@@ -252,6 +254,7 @@ class RequestContext(object):
if not request_id:
request_id = generate_request_id()
self.request_id = request_id
+ self.global_request_id = global_request_id
if overwrite or not get_current():
self.update_store()
@@ -326,6 +329,7 @@ class RequestContext(object):
'show_deleted': self.show_deleted,
'auth_token': self.auth_token,
'request_id': self.request_id,
+ 'global_request_id': self.global_request_id,
'resource_uuid': self.resource_uuid,
'roles': self.roles,
'user_identity': user_idt,
@@ -354,6 +358,7 @@ class RequestContext(object):
kwargs.setdefault('read_only', values.get('read_only', False))
kwargs.setdefault('show_deleted', values.get('show_deleted', False))
kwargs.setdefault('request_id', values.get('request_id'))
+ kwargs.setdefault('global_request_id', values.get('global_request_id'))
kwargs.setdefault('resource_uuid', values.get('resource_uuid'))
kwargs.setdefault('roles', values.get('roles'))
kwargs.setdefault('user_name', values.get('user_name'))
diff --git a/oslo_context/tests/test_context.py b/oslo_context/tests/test_context.py
index f6486b7..b1d30d8 100644
--- a/oslo_context/tests/test_context.py
+++ b/oslo_context/tests/test_context.py
@@ -123,6 +123,7 @@ class ContextTest(test_base.BaseTestCase):
"read_only": True,
"show_deleted": True,
"request_id": "request1",
+ "global_request_id": "req-uuid",
"resource_uuid": "instance1",
"extra_data": "foo"
}
@@ -137,6 +138,7 @@ class ContextTest(test_base.BaseTestCase):
self.assertTrue(ctx.read_only)
self.assertTrue(ctx.show_deleted)
self.assertEqual(dct['request_id'], ctx.request_id)
+ self.assertEqual(dct['global_request_id'], ctx.global_request_id)
self.assertEqual(dct['resource_uuid'], ctx.resource_uuid)
self.assertEqual(dct['user_name'], ctx.user_name)
self.assertEqual(dct['project_name'], ctx.project_name)
@@ -200,6 +202,7 @@ class ContextTest(test_base.BaseTestCase):
project_domain_id = generate_id(project_domain_name)
roles = [uuid.uuid4().hex, uuid.uuid4().hex, uuid.uuid4().hex]
request_id = uuid.uuid4().hex
+ global_request_id = uuid.uuid4().hex
service_token = uuid.uuid4().hex
service_user_id = uuid.uuid4().hex
service_user_name = uuid.uuid4().hex
@@ -233,6 +236,7 @@ class ContextTest(test_base.BaseTestCase):
'HTTP_X_SERVICE_PROJECT_DOMAIN_NAME': service_project_domain_name,
'HTTP_X_SERVICE_ROLES': ','.join(service_roles),
'openstack.request_id': request_id,
+ 'openstack.global_request_id': global_request_id,
}
ctx = context.RequestContext.from_environ(environ)
@@ -248,6 +252,7 @@ class ContextTest(test_base.BaseTestCase):
self.assertEqual(project_domain_name, ctx.project_domain_name)
self.assertEqual(roles, ctx.roles)
self.assertEqual(request_id, ctx.request_id)
+ self.assertEqual(global_request_id, ctx.global_request_id)
self.assertEqual(service_token, ctx.service_token)
self.assertEqual(service_user_id, ctx.service_user_id)
self.assertEqual(service_user_name, ctx.service_user_name)
@@ -382,6 +387,7 @@ class ContextTest(test_base.BaseTestCase):
read_only = True
show_deleted = True
request_id = "id1"
+ global_request_id = "req-id1"
resource_uuid = "uuid1"
ctx = context.RequestContext(auth_token=auth_token,
@@ -399,6 +405,7 @@ class ContextTest(test_base.BaseTestCase):
read_only=read_only,
show_deleted=show_deleted,
request_id=request_id,
+ global_request_id=global_request_id,
resource_uuid=resource_uuid)
self.assertEqual(auth_token, ctx.auth_token)
self.assertEqual(user_id, ctx.user_id)
@@ -463,6 +470,7 @@ class ContextTest(test_base.BaseTestCase):
self.assertIn('read_only', d)
self.assertIn('show_deleted', d)
self.assertIn('request_id', d)
+ self.assertIn('global_request_id', d)
self.assertIn('resource_uuid', d)
self.assertIn('user_identity', d)
self.assertIn('roles', d)
@@ -492,6 +500,12 @@ class ContextTest(test_base.BaseTestCase):
id2 = context.generate_request_id()
self.assertNotEqual(id1, id2)
+ def test_no_global_id_by_default(self):
+ ctx = context.RequestContext()
+ self.assertIsNone(ctx.global_request_id)
+ d = ctx.to_dict()
+ self.assertIsNone(d['global_request_id'])
+
def test_policy_dict(self):
user = uuid.uuid4().hex
user_domain = uuid.uuid4().hex