Fix reverse_upsize_quota_delta attempt to look up deleted flavors

When we did the "great flavor migration of 2015" we missed a quota method
which still looks up flavors by id from the migration. Now that flavors
are moved to the api database and actually removed when deleted, this no
longer works. The problem manifests itself as a failure when trying to
revert a migration or resize operation when the original flavor has been
deleted.

Conflicts:
        nova/tests/unit/compute/test_compute_utils.py

NOTE(mriedem): The conflict is due to uuidsentinel not being imported
in liberty (and is not needed here) and test_migration still being
used in liberty (but not mitaka).

Change-Id: I5f95021410a309ac07fe9f474cbcd0214d1af208
Closes-Bug: #1570748
(cherry picked from commit a46e847aad)
(cherry picked from commit 30aad1e796)
This commit is contained in:
Dan Smith 2016-04-18 12:40:54 -07:00 committed by Matt Riedemann
parent 6fdf1c87b1
commit 5374568fad
4 changed files with 8 additions and 25 deletions

View File

@ -2532,7 +2532,7 @@ class API(base.Base):
elevated, instance.uuid, 'finished')
# reverse quota reservation for increased resource usage
deltas = compute_utils.reverse_upsize_quota_delta(context, migration)
deltas = compute_utils.reverse_upsize_quota_delta(context, instance)
quotas = compute_utils.reserve_quota_delta(context, deltas, instance)
instance.task_state = task_states.RESIZE_REVERTING

View File

@ -455,16 +455,12 @@ def upsize_quota_delta(context, new_flavor, old_flavor):
return resize_quota_delta(context, new_flavor, old_flavor, 1, 1)
def reverse_upsize_quota_delta(context, migration_ref):
def reverse_upsize_quota_delta(context, instance):
"""Calculate deltas required to reverse a prior upsizing
quota adjustment.
"""
old_flavor = objects.Flavor.get_by_id(
context, migration_ref['old_instance_type_id'])
new_flavor = objects.Flavor.get_by_id(
context, migration_ref['new_instance_type_id'])
return resize_quota_delta(context, new_flavor, old_flavor, -1, -1)
return resize_quota_delta(context, instance.new_flavor,
instance.old_flavor, -1, -1)
def downsize_quota_delta(context, instance):

View File

@ -1207,7 +1207,7 @@ class _ComputeAPIUnitTestMixIn(object):
self.context, fake_inst['uuid'], 'finished').AndReturn(
fake_mig)
compute_utils.reverse_upsize_quota_delta(
self.context, fake_mig).AndReturn('deltas')
self.context, fake_inst).AndReturn('deltas')
resvs = ['resvs']
fake_quotas = objects.Quotas.from_reservations(self.context, resvs)
@ -1265,7 +1265,7 @@ class _ComputeAPIUnitTestMixIn(object):
delta = ['delta']
compute_utils.reverse_upsize_quota_delta(
self.context, fake_mig).AndReturn(delta)
self.context, fake_inst).AndReturn(delta)
resvs = ['resvs']
fake_quotas = objects.Quotas.from_reservations(self.context, resvs)
compute_utils.reserve_quota_delta(

View File

@ -723,8 +723,7 @@ class ComputeUtilsQuotaDeltaTestCase(test.TestCase):
deltas = compute_utils.downsize_quota_delta(self.context, inst)
self.assertEqual(expected_deltas, deltas)
@mock.patch.object(objects.Flavor, 'get_by_id')
def test_reverse_quota_delta(self, mock_get_flavor):
def test_reverse_quota_delta(self):
inst = create_instance(self.context, params=None)
inst.old_flavor = flavors.get_flavor_by_name('m1.tiny')
inst.new_flavor = flavors.get_flavor_by_name('m1.medium')
@ -735,20 +734,8 @@ class ComputeUtilsQuotaDeltaTestCase(test.TestCase):
'ram': -1 * (inst.new_flavor['memory_mb'] -
inst.old_flavor['memory_mb'])
}
updates = {'old_instance_type_id': inst.old_flavor['id'],
'new_instance_type_id': inst.new_flavor['id']}
fake_migration = test_migration.fake_db_migration(**updates)
def _flavor_get_by_id(context, type_id):
if type_id == updates['old_instance_type_id']:
return inst.old_flavor
else:
return inst.new_flavor
mock_get_flavor.side_effect = _flavor_get_by_id
deltas = compute_utils.reverse_upsize_quota_delta(self.context,
fake_migration)
deltas = compute_utils.reverse_upsize_quota_delta(self.context, inst)
self.assertEqual(expected_deltas, deltas)
@mock.patch.object(objects.Quotas, 'reserve')