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
This commit is contained in:
Rajesh Tailor 2018-01-03 13:31:38 +05:30
parent 870ad2c205
commit 0d2031a5c4
2 changed files with 7 additions and 1 deletions

View File

@ -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,

View File

@ -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()