From 788bd4749d22cddf9d085e708e41798edf5026ed Mon Sep 17 00:00:00 2001 From: Yi Chun Huang Date: Wed, 22 Mar 2017 14:36:21 +0800 Subject: [PATCH] Will not reraise error out when destroying a failed instance Reraising an error would interrupt the process of removing resources from the failed instance, and then make some resources keep being occupied even after the instance has been deleted. Change-Id: Id79eb4d58618987d9ae5e98a66f8339c423b4c4d --- nova_zvm/tests/unit/virt/zvm/test_zvm.py | 6 ++++-- nova_zvm/virt/zvm/driver.py | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/nova_zvm/tests/unit/virt/zvm/test_zvm.py b/nova_zvm/tests/unit/virt/zvm/test_zvm.py index 7629fcf..4d6e488 100644 --- a/nova_zvm/tests/unit/virt/zvm/test_zvm.py +++ b/nova_zvm/tests/unit/virt/zvm/test_zvm.py @@ -404,8 +404,10 @@ class ZVMDriverTestCases(ZVMTestCase): ("PUT", None, None, self._fake_reachable_data(': reachable')), ("DELETE", None, None, det_res)] self._set_fake_xcat_resp(fake_resp_list) - self.assertRaises(exception.ZVMXCATInternalError, - self.driver.destroy, {}, self.instance, {}, {}) + # Will not reraise xcat error anymore because it could interrupt the + # process of removing resources from the failed instance. Instead there + # will be a warning message in the log. + self.driver.destroy({}, self.instance, {}, {}) self.mox.VerifyAll() def test_destroy_non_exist(self): diff --git a/nova_zvm/virt/zvm/driver.py b/nova_zvm/virt/zvm/driver.py index 373fbc2..14eaf1c 100644 --- a/nova_zvm/virt/zvm/driver.py +++ b/nova_zvm/virt/zvm/driver.py @@ -649,7 +649,12 @@ class ZVMDriver(driver.ComputeDriver): "destroying z/VM instance %s"), inst_name, instance=instance) - zvm_inst.delete_userid(self._get_hcp_info()['nodename'], context) + try: + nodename = self._get_hcp_info()['nodename'] + zvm_inst.delete_userid(nodename, context) + except exception.ZVMBaseException as err: + LOG.warning(_LW("Failed to delete user node: %s"), + err.format_message(), instance=instance) else: LOG.warning(_LW('Instance %s does not exist'), inst_name, instance=instance)