Clean up allocations if instance deleted during build

When we notice that an instance was deleted after scheduling, we punt on
instance creation. When that happens, the scheduler will have created
allocations already so we need to delete those to avoid leaking resources.

Related-Bug: #1679750
Change-Id: I54806fe43257528fbec7d44c841ee4abb14c9dff
This commit is contained in:
Dan Smith 2017-11-05 15:32:01 -08:00
parent d176175db4
commit 57a3af6921
2 changed files with 7 additions and 1 deletions

View File

@ -1053,6 +1053,8 @@ class ComputeTaskManager(base.Base):
'was already deleted.', instance=instance)
# This is a placeholder in case the quota recheck fails.
instances.append(None)
rc = self.scheduler_client.reportclient
rc.delete_allocation_for_instance(instance.uuid)
continue
else:
instance.availability_zone = (

View File

@ -1762,7 +1762,11 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase):
select_destinations.return_value = [{'host': 'fake-host',
'nodename': 'nodesarestupid',
'limits': None}]
self.conductor.schedule_and_build_instances(**self.params)
with mock.patch.object(self.conductor.scheduler_client,
'reportclient') as mock_rc:
self.conductor.schedule_and_build_instances(**self.params)
mock_rc.delete_allocation_for_instance.assert_called_once_with(
inst_uuid)
# we don't create the instance since the build request is gone
self.assertFalse(inst_create.called)
# we don't build the instance since we didn't create it