Clean up allocation if unshelve fails due to neutron
When port binding update fails during unshelve of a shelve offloaded instance compute manager has to catch the exception and clean up the destination host allocation. Conflicts: nova/compute/manager.py due to #Ibb8c12fb2799bb5ceb9e3d72a2b86dbb4f14451e is missing in rocky Squashed Ic1c3d35749fbdc7f5b6f6ec1e16b8fcf37c10de8 into this to avoid intermittently failing test case. Change-Id: I4c3fbb213e023ac16efc0b8561f975a659311684 Closes-Bug: #1862633 (cherry picked from commite65d4a131a
) (cherry picked from commite6b749dbdd
) (cherry picked from commit405a35587a
)
This commit is contained in:
parent
5e452f8eb7
commit
aeeab5d064
|
@ -5369,10 +5369,11 @@ class ComputeManager(manager.Manager):
|
|||
utils.get_image_from_system_metadata(
|
||||
instance.system_metadata))
|
||||
|
||||
self.network_api.setup_instance_network_on_host(context, instance,
|
||||
self.host)
|
||||
network_info = self.network_api.get_instance_nw_info(context, instance)
|
||||
try:
|
||||
self.network_api.setup_instance_network_on_host(context, instance,
|
||||
self.host)
|
||||
network_info = self.network_api.get_instance_nw_info(
|
||||
context, instance)
|
||||
with rt.instance_claim(context, instance, node, limits):
|
||||
self.driver.spawn(context, instance, image_meta,
|
||||
injected_files=[],
|
||||
|
|
|
@ -58,7 +58,8 @@ class UnshelveNeutronErrorTest(
|
|||
}
|
||||
self.api.post_server_action(server['id'], req)
|
||||
self._wait_for_server_parameter(
|
||||
self.api, server, {'status': 'SHELVED_OFFLOADED'})
|
||||
self.api, server, {'status': 'SHELVED_OFFLOADED',
|
||||
'OS-EXT-SRV-ATTR:host': None})
|
||||
allocations = self.placement_api.get(
|
||||
'/allocations/%s' % server['id']).body['allocations']
|
||||
self.assertEqual(0, len(allocations))
|
||||
|
@ -84,14 +85,10 @@ class UnshelveNeutronErrorTest(
|
|||
self.api,
|
||||
server,
|
||||
{'status': 'SHELVED_OFFLOADED',
|
||||
'OS-EXT-STS:task_state': None})
|
||||
'OS-EXT-STS:task_state': None,
|
||||
'OS-EXT-SRV-ATTR:host': None})
|
||||
|
||||
# As the instance went back to offloaded state we expect no allocation
|
||||
# allocations = self.placement_api.get(
|
||||
# '/allocations/%s' % server['id']).body['allocations']
|
||||
# self.assertEqual(0, len(allocations))
|
||||
#
|
||||
# but the allocation is leaked this is bug 1862633
|
||||
allocations = self.placement_api.get(
|
||||
'/allocations/%s' % server['id']).body['allocations']
|
||||
self.assertEqual(1, len(allocations))
|
||||
self.assertEqual(0, len(allocations))
|
||||
|
|
Loading…
Reference in New Issue