From a560ca0a1bea2b20a8aab42369a2319ca53d16f8 Mon Sep 17 00:00:00 2001 From: Vijendar Komalla Date: Thu, 29 Aug 2013 13:23:16 -0500 Subject: [PATCH] parallelize StackResource delete This is fourth and last patch in the series to implement parallel delete. In this patch, parallelizing StackResource deletion. Blueprint parallel-delete Change-Id: I49fb4ad64dd4245b61fad28a401174b11f2b8272 --- heat/engine/resources/dbinstance.py | 2 +- heat/engine/resources/loadbalancer.py | 2 +- heat/engine/resources/stack.py | 2 +- heat/engine/resources/template_resource.py | 2 +- heat/engine/stack_resource.py | 17 ++++++++++++++++- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/heat/engine/resources/dbinstance.py b/heat/engine/resources/dbinstance.py index ea7ff596..f6022821 100644 --- a/heat/engine/resources/dbinstance.py +++ b/heat/engine/resources/dbinstance.py @@ -223,7 +223,7 @@ class DBInstance(stack_resource.StackResource): return self.create_with_template(templ, self._params()) def handle_delete(self): - self.delete_nested() + return self.delete_nested() def _resolve_attribute(self, name): ''' diff --git a/heat/engine/resources/loadbalancer.py b/heat/engine/resources/loadbalancer.py index bb6640ff..b3b3e10a 100644 --- a/heat/engine/resources/loadbalancer.py +++ b/heat/engine/resources/loadbalancer.py @@ -354,7 +354,7 @@ class LoadBalancer(stack_resource.StackResource): self.nested()['LB_instance'].metadata = md def handle_delete(self): - self.delete_nested() + return self.delete_nested() def validate(self): ''' diff --git a/heat/engine/resources/stack.py b/heat/engine/resources/stack.py index 3879935b..15f5e26c 100644 --- a/heat/engine/resources/stack.py +++ b/heat/engine/resources/stack.py @@ -52,7 +52,7 @@ class NestedStack(stack_resource.StackResource): self.properties[PROP_TIMEOUT_MINS]) def handle_delete(self): - self.delete_nested() + return self.delete_nested() def FnGetAtt(self, key): if key and not key.startswith('Outputs.'): diff --git a/heat/engine/resources/template_resource.py b/heat/engine/resources/template_resource.py index f336af32..dfb462dd 100644 --- a/heat/engine/resources/template_resource.py +++ b/heat/engine/resources/template_resource.py @@ -158,7 +158,7 @@ class TemplateResource(stack_resource.StackResource): self._to_parameters()) def handle_delete(self): - self.delete_nested() + return self.delete_nested() def FnGetRefId(self): if not self.nested(): diff --git a/heat/engine/stack_resource.py b/heat/engine/stack_resource.py index b95088c0..ca86cbab 100644 --- a/heat/engine/stack_resource.py +++ b/heat/engine/stack_resource.py @@ -164,7 +164,22 @@ class StackResource(resource.Resource): logger.info("Stack not found to delete") else: if stack is not None: - stack.delete() + delete_task = scheduler.TaskRunner(stack.delete) + delete_task.start() + return delete_task + + def check_delete_complete(self, delete_task): + if delete_task is None: + return True + + done = delete_task.step() + if done: + nested_stack = self.nested() + if nested_stack.state != (nested_stack.DELETE, + nested_stack.COMPLETE): + raise exception.Error(nested_stack.status_reason) + + return done def handle_suspend(self): stack = self.nested() -- 2.45.2