From 0d2031a5c408ef5919387c680eeaac68709a0f6c Mon Sep 17 00:00:00 2001 From: Rajesh Tailor Date: Wed, 3 Jan 2018 13:31:38 +0530 Subject: [PATCH] Allow force-delete even if task_state is not None As of now, if vm task_state is not 'None', and user tries to force-delete instance, then he gets HTTP 500 Error and instance deletion doesn't progress. The same is not the case, when user tries with delete api instead of force-delete api, even if vm task_state is not 'None'. Fixed the issue by allowing force-delete to delete instance in task_state other than None. Change-Id: Ida1a9d8761cec9585f031ec25e5692b8bb55661e Closes-Bug: #1741000 --- nova/compute/api.py | 3 ++- nova/tests/unit/compute/test_compute_api.py | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/nova/compute/api.py b/nova/compute/api.py index b1a347e7b38e..a9d9ea931eed 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -2143,7 +2143,8 @@ class API(base.Base): instance.save(expected_task_state=[None]) @check_instance_lock - @check_instance_state(must_have_launched=False) + @check_instance_state(task_state=None, + must_have_launched=False) def force_delete(self, context, instance): """Force delete an instance in any vm_state/task_state.""" self._delete(context, instance, 'force_delete', self._do_force_delete, diff --git a/nova/tests/unit/compute/test_compute_api.py b/nova/tests/unit/compute/test_compute_api.py index cedeb35467bd..fa192d859eeb 100644 --- a/nova/tests/unit/compute/test_compute_api.py +++ b/nova/tests/unit/compute/test_compute_api.py @@ -1215,6 +1215,11 @@ class _ComputeAPIUnitTestMixIn(object): system_metadata=fake_sys_meta) self._test_delete('force_delete', vm_state=vm_state) + def test_delete_forced_when_task_state_is_not_none(self): + for vm_state in self._get_vm_states(): + self._test_delete('force_delete', vm_state=vm_state, + task_state=task_states.RESIZE_MIGRATING) + def test_delete_fast_if_host_not_set(self): self.useFixture(fixtures.AllServicesCurrent()) inst = self._create_instance_obj()