summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin L. Mitchell <kevin.mitchell@rackspace.com>2012-07-25 17:27:57 -0500
committerKevin L. Mitchell <kevin.mitchell@rackspace.com>2012-07-25 17:28:40 -0500
commit6f0fecbed3a72ce052662a6bc6441d6aac6b9d1f (patch)
treebae04b103d734b414c886985deb5359362746569
parent6908fbf2f819482e99fd266985e9d16cb97e2bb8 (diff)
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
-rw-r--r--nova/compute/api.py3
1 files changed, 1 insertions, 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'),