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. Change-Id: I5f95021410a309ac07fe9f474cbcd0214d1af208 Closes-Bug: #1570748
This commit is contained in:
parent
79fd7d99b8
commit
a46e847aad
|
@ -2539,7 +2539,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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -1375,7 +1375,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)
|
||||
|
@ -1433,7 +1433,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(
|
||||
|
|
|
@ -46,7 +46,6 @@ from nova.tests.unit import fake_notifier
|
|||
from nova.tests.unit import fake_server_actions
|
||||
import nova.tests.unit.image.fake
|
||||
from nova.tests.unit.objects import test_flavor
|
||||
from nova.tests.unit.objects import test_migration
|
||||
from nova.tests import uuidsentinel as uuids
|
||||
|
||||
|
||||
|
@ -684,8 +683,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')
|
||||
|
@ -696,20 +694,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')
|
||||
|
|
Loading…
Reference in New Issue