Remove restoring soft deleted entries part 2
There is no need to reuse deleted entries, because they will be archived after db-archiving implementation. And restoring soft deleted entries produce some problem with db-unique-keys implementation. So the best way is to remove it. instance_type_access_add() method Remove restoring soft deleted instance_type_access entries Add missing tests for instance_type_access_add blueprint db-session-cleanup Change-Id: I82ee56b50a8422a4b620f4e58967258bac7c01c6
This commit is contained in:
parent
3a92a9efe9
commit
309e47fd0c
@ -3671,7 +3671,7 @@ def instance_type_destroy(context, name):
|
||||
@require_context
|
||||
def _instance_type_access_query(context, session=None):
|
||||
return model_query(context, models.InstanceTypeProjects, session=session,
|
||||
read_deleted="yes")
|
||||
read_deleted="no")
|
||||
|
||||
|
||||
@require_admin_context
|
||||
@ -3687,6 +3687,8 @@ def instance_type_access_get_by_flavor_id(context, flavor_id):
|
||||
@require_admin_context
|
||||
def instance_type_access_add(context, flavor_id, project_id):
|
||||
"""Add given tenant to the flavor access list."""
|
||||
# NOTE(boris-42): There is a race condition in this method and it will be
|
||||
# rewritten after bp/db-unique-keys implementation.
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
instance_type_ref = instance_type_get_by_flavor_id(context, flavor_id,
|
||||
@ -3694,21 +3696,16 @@ def instance_type_access_add(context, flavor_id, project_id):
|
||||
instance_type_id = instance_type_ref['id']
|
||||
access_ref = _instance_type_access_query(context, session=session).\
|
||||
filter_by(instance_type_id=instance_type_id).\
|
||||
filter_by(project_id=project_id).first()
|
||||
|
||||
if not access_ref:
|
||||
access_ref = models.InstanceTypeProjects()
|
||||
access_ref.instance_type_id = instance_type_id
|
||||
access_ref.project_id = project_id
|
||||
access_ref.save(session=session)
|
||||
elif access_ref.deleted:
|
||||
access_ref.update({'deleted': False,
|
||||
'deleted_at': None})
|
||||
access_ref.save(session=session)
|
||||
else:
|
||||
filter_by(project_id=project_id).\
|
||||
first()
|
||||
if access_ref:
|
||||
raise exception.FlavorAccessExists(flavor_id=flavor_id,
|
||||
project_id=project_id)
|
||||
|
||||
access_ref = models.InstanceTypeProjects()
|
||||
access_ref.update({"instance_type_id": instance_type_id,
|
||||
"project_id": project_id})
|
||||
access_ref.save(session=session)
|
||||
return access_ref
|
||||
|
||||
|
||||
@ -3724,7 +3721,6 @@ def instance_type_access_remove(context, flavor_id, project_id):
|
||||
filter_by(instance_type_id=instance_type_id).\
|
||||
filter_by(project_id=project_id).\
|
||||
soft_delete()
|
||||
|
||||
if count == 0:
|
||||
raise exception.FlavorAccessNotFound(flavor_id=flavor_id,
|
||||
project_id=project_id)
|
||||
|
@ -142,6 +142,67 @@ class InstanceTypeTestCase(test.TestCase):
|
||||
self.assertRaises(exception.InvalidInput, instance_types.create,
|
||||
name, 256, 1, 120, 100, flavorid)
|
||||
|
||||
def test_add_instance_type_access(self):
|
||||
user_id = 'fake'
|
||||
project_id = 'fake'
|
||||
ctxt = context.RequestContext(user_id, project_id, is_admin=True)
|
||||
flavor_id = 'flavor1'
|
||||
type_ref = instance_types.create('some flavor', 256, 1, 120, 100,
|
||||
flavorid=flavor_id)
|
||||
access_ref = instance_types.add_instance_type_access(flavor_id,
|
||||
project_id,
|
||||
ctxt=ctxt)
|
||||
self.assertEqual(access_ref["project_id"], project_id)
|
||||
self.assertEqual(access_ref["instance_type_id"], type_ref["id"])
|
||||
|
||||
def test_add_instance_type_access_already_exists(self):
|
||||
user_id = 'fake'
|
||||
project_id = 'fake'
|
||||
ctxt = context.RequestContext(user_id, project_id, is_admin=True)
|
||||
flavor_id = 'flavor1'
|
||||
type_ref = instance_types.create('some flavor', 256, 1, 120, 100,
|
||||
flavorid=flavor_id)
|
||||
access_ref = instance_types.add_instance_type_access(flavor_id,
|
||||
project_id,
|
||||
ctxt=ctxt)
|
||||
self.assertRaises(exception.FlavorAccessExists,
|
||||
instance_types.add_instance_type_access,
|
||||
flavor_id, project_id, ctxt)
|
||||
|
||||
def test_add_instance_type_access_invalid_flavor(self):
|
||||
user_id = 'fake'
|
||||
project_id = 'fake'
|
||||
ctxt = context.RequestContext(user_id, project_id, is_admin=True)
|
||||
flavor_id = 'no_such_flavor'
|
||||
self.assertRaises(exception.FlavorNotFound,
|
||||
instance_types.add_instance_type_access,
|
||||
flavor_id, project_id, ctxt)
|
||||
|
||||
def test_remove_instance_type_access(self):
|
||||
user_id = 'fake'
|
||||
project_id = 'fake'
|
||||
ctxt = context.RequestContext(user_id, project_id, is_admin=True)
|
||||
flavor_id = 'flavor1'
|
||||
it = instance_types
|
||||
type_ref = it.create('some flavor', 256, 1, 120, 100,
|
||||
flavorid=flavor_id)
|
||||
access_ref = it.add_instance_type_access(flavor_id, project_id, ctxt)
|
||||
it.remove_instance_type_access(flavor_id, project_id, ctxt)
|
||||
|
||||
projects = it.get_instance_type_access_by_flavor_id(flavor_id, ctxt)
|
||||
self.assertEqual([], projects)
|
||||
|
||||
def test_remove_instance_type_access_doesnt_exists(self):
|
||||
user_id = 'fake'
|
||||
project_id = 'fake'
|
||||
ctxt = context.RequestContext(user_id, project_id, is_admin=True)
|
||||
flavor_id = 'flavor1'
|
||||
type_ref = instance_types.create('some flavor', 256, 1, 120, 100,
|
||||
flavorid=flavor_id)
|
||||
self.assertRaises(exception.FlavorAccessNotFound,
|
||||
instance_types.remove_instance_type_access,
|
||||
flavor_id, project_id, ctxt=ctxt)
|
||||
|
||||
def test_get_all_instance_types(self):
|
||||
# Ensures that all instance types can be retrieved.
|
||||
session = sql_session.get_session()
|
||||
|
Loading…
x
Reference in New Issue
Block a user