From 023ce006a0a11084fe4d05d779efced40f97fa70 Mon Sep 17 00:00:00 2001 From: Zane Bitter Date: Thu, 11 Dec 2014 14:00:18 -0500 Subject: [PATCH] Allow VolumeAttachments to delete in parallel Deleting a VolumeAttachment was still blocking; this change allows other resources to be processed while we are waiting for the volume to be detached. Change-Id: Id1a7bf2a353cb1f255ab335ab8c39edbeb4dc292 --- heat/engine/resources/volume.py | 7 ++++++- heat/tests/test_volume.py | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/heat/engine/resources/volume.py b/heat/engine/resources/volume.py index efaeab489b..b199fcb3ff 100644 --- a/heat/engine/resources/volume.py +++ b/heat/engine/resources/volume.py @@ -468,7 +468,12 @@ class VolumeAttachment(resource.Resource): def handle_delete(self): server_id = self.properties[self.INSTANCE_ID] detach_task = VolumeDetachTask(self.stack, server_id, self.resource_id) - scheduler.TaskRunner(detach_task)() + detach_runner = scheduler.TaskRunner(detach_task) + detach_runner.start() + return detach_runner + + def check_delete_complete(self, detach_runner): + return detach_runner.step() class CinderVolume(Volume): diff --git a/heat/tests/test_volume.py b/heat/tests/test_volume.py index 36d2dbfe05..c27f7a155e 100644 --- a/heat/tests/test_volume.py +++ b/heat/tests/test_volume.py @@ -265,10 +265,13 @@ class VolumeTest(BaseVolumeTest): # delete script self.m.StubOutWithMock(instance.Instance, 'handle_delete') self.m.StubOutWithMock(vol.VolumeAttachment, 'handle_delete') + self.m.StubOutWithMock(vol.VolumeAttachment, 'check_delete_complete') instance.Instance.handle_delete().AndReturn(None) self.cinder_fc.volumes.get('vol-123').AndRaise( cinder_exp.NotFound('Not found')) - vol.VolumeAttachment.handle_delete().AndReturn(None) + cookie = object() + vol.VolumeAttachment.handle_delete().AndReturn(cookie) + vol.VolumeAttachment.check_delete_complete(cookie).AndReturn(True) self.m.ReplayAll() stack = utils.parse_stack(self.t, stack_name=stack_name)