From 6f0fecbed3a72ce052662a6bc6441d6aac6b9d1f Mon Sep 17 00:00:00 2001 From: "Kevin L. Mitchell" Date: Wed, 25 Jul 2012 17:27:57 -0500 Subject: Allow soft deletes from any state At some point in the past, the compute manager's delete() method had its @check_instance_state() decorator updated to allow deletes to be performed from any combination of vm_state and task_state. This same change was not made to the soft_delete() method, and so soft_delete() is only available if the task_state is clear, meaning that instances that are put into ERROR state with task_state set to something are effectively undeletable, if FLAGS.reclaim_instance_interval is set to some non-zero value (which is what causes the API DELETE call to use soft_delete() as opposed to delete()). This patch updates the @check_instance_state() on soft_delete() to match that on delete(), and fixes bug 1029130 and bug 1029133. This patch also partially fixes bug 1029132, but more needs to be done to completely fix that bug. Change-Id: I78878110c696280f2bc28434433814884a526264 --- nova/compute/api.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nova/compute/api.py b/nova/compute/api.py index eb23a2412..ce256f5f6 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -824,8 +824,7 @@ class API(base.Base): return dict(instance_ref.iteritems()) @wrap_check_policy - @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.STOPPED, - vm_states.ERROR]) + @check_instance_state(vm_state=None, task_state=None) def soft_delete(self, context, instance): """Terminate an instance.""" LOG.debug(_('Going to try to soft delete instance'), -- cgit