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
(cherry picked from commit 57a3af6921)
This commit is contained in:
Dan Smith 2017-11-05 15:32:01 -08:00 committed by Matt Riedemann
parent 60d6e87cac
commit 2cd20613e3
2 changed files with 7 additions and 1 deletions

View File

@ -1071,6 +1071,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

@ -1759,7 +1759,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