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/compute/api.py nova/compute/utils.py nova/tests/unit/compute/test_compute_api.py nova/tests/unit/compute/test_compute_utils.py NOTE(mriedem): The conflicts are due to _reverse_upsize_quota_delta being moved from nova.compute.api to nova.compute.utils in liberty in commit60411ddf1b
. So the nova.compute.utils changes are omitted here. Also, there was no direct testing of _reverse_upsize_quota_delta until that change in liberty so as part of this cherry pick we pull back the test_reverse_quota_delta test. It's modified slightly since it's in a NoDBTestCase. Change-Id: I5f95021410a309ac07fe9f474cbcd0214d1af208 Closes-Bug: #1570748 (cherry picked from commita46e847aad
) (cherry picked from commit30aad1e796
) (cherry picked from commit5374568fad
)
This commit is contained in:
parent
b74cd117d7
commit
7e3d3abf50
|
@ -2490,7 +2490,7 @@ class API(base.Base):
|
|||
elevated, instance.uuid, 'finished')
|
||||
|
||||
# reverse quota reservation for increased resource usage
|
||||
deltas = self._reverse_upsize_quota_delta(context, migration)
|
||||
deltas = self._reverse_upsize_quota_delta(context, instance)
|
||||
quotas = self._reserve_quota_delta(context, deltas, instance)
|
||||
|
||||
instance.task_state = task_states.RESIZE_REVERTING
|
||||
|
@ -2580,16 +2580,12 @@ class API(base.Base):
|
|||
return API._resize_quota_delta(context, new_flavor, old_flavor, 1, 1)
|
||||
|
||||
@staticmethod
|
||||
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 API._resize_quota_delta(context, new_flavor, old_flavor, -1, -1)
|
||||
return API._resize_quota_delta(context, instance.new_flavor,
|
||||
instance.old_flavor, -1, -1)
|
||||
|
||||
@staticmethod
|
||||
def _downsize_quota_delta(context, instance):
|
||||
|
|
|
@ -1168,7 +1168,7 @@ class _ComputeAPIUnitTestMixIn(object):
|
|||
self.context, fake_inst['uuid'], 'finished').AndReturn(
|
||||
fake_mig)
|
||||
self.compute_api._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)
|
||||
|
@ -1226,7 +1226,7 @@ class _ComputeAPIUnitTestMixIn(object):
|
|||
|
||||
delta = ['delta']
|
||||
self.compute_api._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)
|
||||
self.compute_api._reserve_quota_delta(
|
||||
|
@ -1244,6 +1244,22 @@ class _ComputeAPIUnitTestMixIn(object):
|
|||
self.context,
|
||||
fake_inst)
|
||||
|
||||
def test_reverse_quota_delta(self):
|
||||
inst = self._create_instance_obj(params=None)
|
||||
inst.old_flavor = self._create_flavor(vcpus=1, memory_mb=512)
|
||||
inst.new_flavor = self._create_flavor(vcpus=2, memory_mb=4096)
|
||||
|
||||
expected_deltas = {
|
||||
'cores': -1 * (inst.new_flavor['vcpus'] -
|
||||
inst.old_flavor['vcpus']),
|
||||
'ram': -1 * (inst.new_flavor['memory_mb'] -
|
||||
inst.old_flavor['memory_mb'])
|
||||
}
|
||||
|
||||
deltas = self.compute_api._reverse_upsize_quota_delta(
|
||||
self.context, inst)
|
||||
self.assertEqual(expected_deltas, deltas)
|
||||
|
||||
def _test_resize(self, flavor_id_passed=True,
|
||||
same_host=False, allow_same_host=False,
|
||||
allow_mig_same_host=False,
|
||||
|
|
Loading…
Reference in New Issue