From ec7cdc4cc560150673f14c84a326f6a72d43d3e1 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Sun, 14 May 2017 07:14:25 -0400 Subject: 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 --- oslo_context/context.py | 7 ++++++- oslo_context/tests/test_context.py | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'oslo_context') 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 -- cgit v1.2.1