From 23fdd3b9dfd920f61f4592361bd73e7934337a5c Mon Sep 17 00:00:00 2001 From: Zane Bitter Date: Fri, 24 May 2013 10:31:27 +0200 Subject: [PATCH] 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 --- heat/engine/resources/instance.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) 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) -- 2.45.2