Be consistent about context first argument in db api

By ensuring every db api function has the context as its first
argument, this raises the possiblity of using oslo.db recommended
session handling:
http://docs.openstack.org/developer/oslo.db/usage.html#session-handling

Change-Id: I3649bdbf254e2834e79984cc381a1db1ea9e78b8
Related-Bug: #1479723
This commit is contained in:
Steve Baker 2016-06-15 17:07:56 +12:00
parent a393a4a695
commit 4ed43674c1
8 changed files with 71 additions and 53 deletions

View File

@ -70,21 +70,22 @@ def resource_data_get_all(context, resource_id, data=None):
return IMPL.resource_data_get_all(context, resource_id, data)
def resource_data_get(resource, key):
return IMPL.resource_data_get(resource, key)
def resource_data_get(context, resource_id, key):
return IMPL.resource_data_get(context, resource_id, key)
def resource_data_set(resource, key, value, redact=False):
return IMPL.resource_data_set(resource, key, value, redact=redact)
def resource_data_set(context, resource_id, key, value, redact=False):
return IMPL.resource_data_set(context, resource_id, key, value,
redact=redact)
def resource_data_get_by_key(context, resource_id, key):
return IMPL.resource_data_get_by_key(context, resource_id, key)
def resource_data_delete(resource, key):
def resource_data_delete(context, resource_id, key):
"""Remove a resource_data element associated to a resource."""
return IMPL.resource_data_delete(resource, key)
return IMPL.resource_data_delete(context, resource_id, key)
def stack_tags_set(context, stack_id, tags):
@ -242,8 +243,8 @@ def user_creds_delete(context, user_creds_id):
return IMPL.user_creds_delete(context, user_creds_id)
def user_creds_get(context_id):
return IMPL.user_creds_get(context_id)
def user_creds_get(context, user_creds_id):
return IMPL.user_creds_get(context, user_creds_id)
def event_get(context, event_id):

View File

@ -240,13 +240,13 @@ def resource_data_get_all(context, resource_id, data=None):
return ret
def resource_data_get(resource, key):
def resource_data_get(context, resource_id, key):
"""Lookup value of resource's data by key.
Decrypts resource data if necessary.
"""
result = resource_data_get_by_key(resource.context,
resource.id,
result = resource_data_get_by_key(context,
resource_id,
key)
if result.redact:
return crypt.decrypt(result.decrypt_method, result.value)
@ -297,22 +297,22 @@ def resource_data_get_by_key(context, resource_id, key):
return result
def resource_data_set(resource, key, value, redact=False):
def resource_data_set(context, resource_id, key, value, redact=False):
"""Save resource's key/value pair to database."""
if redact:
method, value = crypt.encrypt(value)
else:
method = ''
try:
current = resource_data_get_by_key(resource.context, resource.id, key)
current = resource_data_get_by_key(context, resource_id, key)
except exception.NotFound:
current = models.ResourceData()
current.key = key
current.resource_id = resource.id
current.resource_id = resource_id
current.redact = redact
current.value = value
current.decrypt_method = method
current.save(session=resource.context.session)
current.save(session=_session(context))
return current
@ -329,8 +329,8 @@ def resource_exchange_stacks(context, resource_id1, resource_id2):
session.commit()
def resource_data_delete(resource, key):
result = resource_data_get_by_key(resource.context, resource.id, key)
def resource_data_delete(context, resource_id, key):
result = resource_data_get_by_key(context, resource_id, key)
result.delete()
@ -733,8 +733,8 @@ def user_creds_create(context):
return result
def user_creds_get(user_creds_id):
db_result = model_query(None, models.UserCreds).get(user_creds_id)
def user_creds_get(context, user_creds_id):
db_result = model_query(context, models.UserCreds).get(user_creds_id)
if db_result is None:
return None
# Return a dict copy of db results, do not decrypt details into db_result

View File

@ -281,7 +281,8 @@ class Stack(collections.Mapping):
def stored_context(self):
if self.user_creds_id:
creds_obj = ucreds_object.UserCreds.get_by_id(self.user_creds_id)
creds_obj = ucreds_object.UserCreds.get_by_id(
self.context, self.user_creds_id)
# Maintain request_id from self.context so we retain traceability
# in situations where servicing a request requires switching from
# the request context to the stored context
@ -1563,7 +1564,8 @@ class Stack(collections.Mapping):
# Ignore this error instead of blocking stack deletion.
user_creds = None
try:
user_creds = ucreds_object.UserCreds.get_by_id(self.user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(
self.context, self.user_creds_id)
except exception.Error as err:
LOG.exception(err)
pass

View File

@ -62,12 +62,13 @@ class ResourceData(
@classmethod
def get_val(cls, resource, key):
return db_api.resource_data_get(resource, key)
return db_api.resource_data_get(resource.context, resource.id, key)
@classmethod
def set(cls, resource, key, value, *args, **kwargs):
db_data = db_api.resource_data_set(
resource,
resource.context,
resource.id,
key,
value,
*args,
@ -82,4 +83,4 @@ class ResourceData(
@classmethod
def delete(cls, resource, key):
db_api.resource_data_delete(resource, key)
db_api.resource_data_delete(resource.context, resource.id, key)

View File

@ -67,7 +67,7 @@ class UserCreds(
db_api.user_creds_delete(context, user_creds_id)
@classmethod
def get_by_id(cls, context_id):
user_creds_db = db_api.user_creds_get(context_id)
def get_by_id(cls, context, user_creds_id):
user_creds_db = db_api.user_creds_get(context, user_creds_id)
user_creds = cls._from_db_object(cls(), user_creds_db)
return user_creds

View File

@ -87,7 +87,7 @@ class MyResource(rsrc.Resource):
@property
def my_secret(self):
return db_api.resource_data_get(self, 'my_secret')
return db_api.resource_data_get(self.context, self.id, 'my_secret')
@my_secret.setter
def my_secret(self, my_secret):
@ -346,11 +346,12 @@ class SqlAlchemyTest(common.HeatTestCase):
stack.create()
resource = stack['WebServer']
resource.data_set('test', 'test_data')
self.assertEqual('test_data', db_api.resource_data_get(resource,
'test'))
db_api.resource_data_delete(resource, 'test')
self.assertEqual('test_data', db_api.resource_data_get(
self.ctx, resource.id, 'test'))
db_api.resource_data_delete(self.ctx, resource.id, 'test')
self.assertRaises(exception.NotFound,
db_api.resource_data_get, resource, 'test')
db_api.resource_data_get, self.ctx,
resource.id, 'test')
def test_stack_get_by_name(self):
stack = self._setup_test_stack('stack', UUID1,
@ -983,7 +984,7 @@ class SqlAlchemyTest(common.HeatTestCase):
self.ctx.trust_id = None
self.ctx.region_name = 'RegionOne'
db_creds = db_api.user_creds_create(self.ctx)
load_creds = db_api.user_creds_get(db_creds['id'])
load_creds = db_api.user_creds_get(self.ctx, db_creds['id'])
self.assertEqual('test_username', load_creds.get('username'))
self.assertEqual('password', load_creds.get('password'))
@ -1016,7 +1017,7 @@ class SqlAlchemyTest(common.HeatTestCase):
self.ctx.auth_url = 'anauthurl'
self.ctx.region_name = 'aregion'
db_creds = db_api.user_creds_create(self.ctx)
load_creds = db_api.user_creds_get(db_creds['id'])
load_creds = db_api.user_creds_get(self.ctx, db_creds['id'])
self.assertIsNone(load_creds.get('username'))
self.assertIsNone(load_creds.get('password'))
@ -1035,7 +1036,7 @@ class SqlAlchemyTest(common.HeatTestCase):
self.ctx.trust_id = None
self.ctx.region_name = None
db_creds = db_api.user_creds_create(self.ctx)
load_creds = db_api.user_creds_get(db_creds['id'])
load_creds = db_api.user_creds_get(self.ctx, db_creds['id'])
self.assertIsNone(load_creds.get('username'))
self.assertIsNone(load_creds.get('password'))
@ -1440,7 +1441,7 @@ def create_resource_data(ctx, resource, **kwargs):
'redact': 0,
}
values.update(kwargs)
return db_api.resource_data_set(resource, **values)
return db_api.resource_data_set(ctx, resource.id, **values)
def create_event(ctx, **kwargs):
@ -1594,18 +1595,18 @@ class DBAPIUserCredsTest(common.HeatTestCase):
def test_user_creds_get(self):
user_creds = create_user_creds(self.ctx)
ret_user_creds = db_api.user_creds_get(user_creds['id'])
ret_user_creds = db_api.user_creds_get(self.ctx, user_creds['id'])
self.assertEqual(user_creds['password'],
ret_user_creds['password'])
def test_user_creds_get_noexist(self):
self.assertIsNone(db_api.user_creds_get(123456))
self.assertIsNone(db_api.user_creds_get(self.ctx, 123456))
def test_user_creds_delete(self):
user_creds = create_user_creds(self.ctx)
self.assertIsNotNone(user_creds['id'])
db_api.user_creds_delete(self.ctx, user_creds['id'])
creds = db_api.user_creds_get(user_creds['id'])
creds = db_api.user_creds_get(self.ctx, user_creds['id'])
self.assertIsNone(creds)
mock_delete = self.patchobject(session.Session, 'delete')
err = self.assertRaises(
@ -2089,7 +2090,8 @@ class DBAPIStackTest(common.HeatTestCase):
self.assertEqual([],
db_api.event_get_all_by_stack(ctx,
stacks[s].id))
self.assertIsNone(db_api.user_creds_get(stacks[s].user_creds_id))
self.assertIsNone(db_api.user_creds_get(
self.ctx, stacks[s].user_creds_id))
tmpl_idx = tmpl_idx + 1
def test_stack_get_root_id(self):
@ -2435,18 +2437,21 @@ class DBAPIResourceDataTest(common.HeatTestCase):
def test_resource_data_set_get(self):
create_resource_data(self.ctx, self.resource)
val = db_api.resource_data_get(self.resource, 'test_resource_key')
val = db_api.resource_data_get(
self.ctx, self.resource.id, 'test_resource_key')
self.assertEqual('test_value', val)
# Updating existing resource data
create_resource_data(self.ctx, self.resource, value='foo')
val = db_api.resource_data_get(self.resource, 'test_resource_key')
val = db_api.resource_data_get(
self.ctx, self.resource.id, 'test_resource_key')
self.assertEqual('foo', val)
# Testing with encrypted value
create_resource_data(self.ctx, self.resource,
key='encryped_resource_key', redact=True)
val = db_api.resource_data_get(self.resource, 'encryped_resource_key')
val = db_api.resource_data_get(
self.ctx, self.resource.id, 'encryped_resource_key')
self.assertEqual('test_value', val)
# get all by querying for data
@ -2469,7 +2474,8 @@ class DBAPIResourceDataTest(common.HeatTestCase):
self.assertIsNotNone(res_data)
self.assertEqual('test_value', res_data.value)
db_api.resource_data_delete(self.resource, 'test_resource_key')
db_api.resource_data_delete(self.ctx, self.resource.id,
'test_resource_key')
self.assertRaises(exception.NotFound, db_api.resource_data_get_by_key,
self.ctx, self.resource.id, 'test_resource_key')
self.assertIsNotNone(res_data)

View File

@ -1372,7 +1372,7 @@ class StackTest(common.HeatTestCase):
self.assertIsNotNone(user_creds_id)
# should've stored the username/password in the context
user_creds = ucreds_object.UserCreds.get_by_id(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(self.ctx, user_creds_id)
self.assertEqual(self.ctx.username, user_creds.get('username'))
self.assertEqual(self.ctx.password, user_creds.get('password'))
self.assertIsNone(user_creds.get('trust_id'))
@ -1411,7 +1411,7 @@ class StackTest(common.HeatTestCase):
# should've stored the trust_id and trustor_user_id returned from
# FakeKeystoneClient.create_trust_context, username/password should
# not have been stored
user_creds = ucreds_object.UserCreds.get_by_id(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(self.ctx, user_creds_id)
self.assertIsNone(user_creds.get('username'))
self.assertIsNone(user_creds.get('password'))
self.assertEqual('atrust', user_creds.get('trust_id'))

View File

@ -92,14 +92,16 @@ class StackTest(common.HeatTestCase):
self.assertIsNotNone(db_s)
self.assertIsNotNone(db_s.user_creds_id)
user_creds_id = db_s.user_creds_id
db_creds = ucreds_object.UserCreds.get_by_id(db_s.user_creds_id)
db_creds = ucreds_object.UserCreds.get_by_id(
self.ctx, db_s.user_creds_id)
self.assertIsNotNone(db_creds)
self.stack.delete()
db_s = stack_object.Stack.get_by_id(self.ctx, stack_id)
self.assertIsNone(db_s)
db_creds = ucreds_object.UserCreds.get_by_id(user_creds_id)
db_creds = ucreds_object.UserCreds.get_by_id(
self.ctx, user_creds_id)
self.assertIsNone(db_creds)
del_db_s = stack_object.Stack.get_by_id(self.ctx,
stack_id,
@ -122,7 +124,8 @@ class StackTest(common.HeatTestCase):
self.assertIsNotNone(db_s)
self.assertIsNotNone(db_s.user_creds_id)
user_creds_id = db_s.user_creds_id
db_creds = ucreds_object.UserCreds.get_by_id(db_s.user_creds_id)
db_creds = ucreds_object.UserCreds.get_by_id(
self.ctx, db_s.user_creds_id)
self.assertIsNotNone(db_creds)
ucreds_object.UserCreds.delete(self.ctx, user_creds_id)
@ -131,7 +134,8 @@ class StackTest(common.HeatTestCase):
db_s = stack_object.Stack.get_by_id(self.ctx, stack_id)
self.assertIsNone(db_s)
db_creds = ucreds_object.UserCreds.get_by_id(user_creds_id)
db_creds = ucreds_object.UserCreds.get_by_id(
self.ctx, user_creds_id)
self.assertIsNone(db_creds)
del_db_s = stack_object.Stack.get_by_id(self.ctx,
stack_id,
@ -192,7 +196,8 @@ class StackTest(common.HeatTestCase):
user_creds_id = db_s.user_creds_id
self.assertIsNotNone(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(
self.ctx, user_creds_id)
self.assertEqual('thetrustor', user_creds.get('trustor_user_id'))
self.stack.delete()
@ -223,7 +228,8 @@ class StackTest(common.HeatTestCase):
user_creds_id = db_s.user_creds_id
self.assertIsNotNone(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(
self.ctx, user_creds_id)
self.assertEqual('thetrustor', user_creds.get('trustor_user_id'))
mock_kc.return_value = fakes.FakeKeystoneClient(user_id='nottrustor')
@ -274,14 +280,16 @@ class StackTest(common.HeatTestCase):
self.assertIsNotNone(db_s)
user_creds_id = db_s.user_creds_id
self.assertIsNotNone(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(
self.ctx, user_creds_id)
self.assertIsNotNone(user_creds)
self.stack.delete()
db_s = stack_object.Stack.get_by_id(self.ctx, stack_id)
self.assertIsNone(db_s)
user_creds = ucreds_object.UserCreds.get_by_id(user_creds_id)
user_creds = ucreds_object.UserCreds.get_by_id(
self.ctx, user_creds_id)
self.assertIsNotNone(user_creds)
self.assertEqual((stack.Stack.DELETE, stack.Stack.COMPLETE),
self.stack.state)