From 00f751b2c479aee91d97a8d04b0cd6e5dbc0dbfa Mon Sep 17 00:00:00 2001 From: Vijendar Komalla Date: Thu, 29 Aug 2013 12:44:33 -0500 Subject: [PATCH] parallelize instance delete This is third patch in the series to implement parallel delete. In this patch, parallelizing instance deletion Blueprint parallel-delete Change-Id: I86d2e25901b330dcf4b0e512eec66fb71199727b --- heat/engine/resources/instance.py | 39 ++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/heat/engine/resources/instance.py b/heat/engine/resources/instance.py index d8509c9b..fcb82d7e 100644 --- a/heat/engine/resources/instance.py +++ b/heat/engine/resources/instance.py @@ -383,6 +383,24 @@ class Instance(resource.Resource): # make sure the image exists. nova_utils.get_image_id(self.nova(), self.properties['ImageId']) + @scheduler.wrappertask + def _delete_server(self, server): + ''' + Return a co-routine that deletes the server and waits for it to + disappear from Nova. + ''' + yield self._detach_volumes_task()() + server.delete() + + while True: + yield + + try: + server.get() + except clients.novaclient.exceptions.NotFound: + self.resource_id = None + break + def _detach_volumes_task(self): ''' Detach volumes from the instance @@ -400,18 +418,23 @@ class Instance(resource.Resource): if self.resource_id is None: return - scheduler.TaskRunner(self._detach_volumes_task())() - try: server = self.nova().servers.get(self.resource_id) except clients.novaclient.exceptions.NotFound: - pass - else: - delete = scheduler.TaskRunner( - nova_utils.delete_server, server) - delete(wait_time=0.2) + self.resource_id = None + return + + server_delete_task = scheduler.TaskRunner(self._delete_server, + server=server) + server_delete_task.start() + return server_delete_task - self.resource_id = None + def check_delete_complete(self, server_delete_task): + # if the resource was already deleted, server_delete_task will be None + if server_delete_task is None: + return True + else: + return server_delete_task.step() def handle_suspend(self): ''' -- 2.45.2