From: Zane Bitter Date: Fri, 24 May 2013 08:31:27 +0000 (+0200) Subject: Detach Volumes from an Instance in parallel X-Git-Tag: 2014.1~556^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=23fdd3b9dfd920f61f4592361bd73e7934337a5c;p=openstack-build%2Fheat-build.git Detach Volumes from an Instance in parallel Use a PollingTaskGroup to ensure that if there are multiple Volumes attached to an Instance they are detached in parallel rather than serially. Change-Id: Ice399ae495af75558f2f8b1b1dc330d0b556a269 --- diff --git a/heat/engine/resources/instance.py b/heat/engine/resources/instance.py index 2dfc4c9b..607fb58b 100644 --- a/heat/engine/resources/instance.py +++ b/heat/engine/resources/instance.py @@ -385,13 +385,6 @@ class Instance(resource.Resource): return ((vol['VolumeId'], vol['Device']) for vol in volumes) - def detach_volumes(self): - for volume_id, device in self.volumes(): - detach_task = volume.VolumeDetachTask(self.stack, - self.resource_id, - volume_id) - scheduler.TaskRunner(detach_task)() - def handle_update(self, json_snippet, tmpl_diff, prop_diff): if 'Metadata' in tmpl_diff: self.metadata = tmpl_diff.get('Metadata', {}) @@ -433,7 +426,11 @@ class Instance(resource.Resource): if self.resource_id is None: return - self.detach_volumes() + detach_tasks = (volume.VolumeDetachTask(self.stack, + self.resource_id, + volume_id) + for volume_id, device in self.volumes()) + scheduler.TaskRunner(scheduler.PollingTaskGroup(detach_tasks))() try: server = self.nova().servers.get(self.resource_id)