summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-03-15 01:26:31 +0000
committerGerrit Code Review <review@openstack.org>2012-03-15 01:26:31 +0000
commit3cf1b0312c3e18228c38a02f4d71b768dbbb7e53 (patch)
tree766b315ac224b468d7f62203931b48f0faf0b693 /nova
parente0d14ca213198500014bf53d5843fa07aaded366 (diff)
parent22b484a6d0b65c2a41fd4c730a5ebddf98c70c84 (diff)
Merge "Allow errored volumes to be deleted"
Diffstat (limited to 'nova')
-rw-r--r--nova/tests/test_vsa_volumes.py11
-rw-r--r--nova/volume/api.py8
2 files changed, 11 insertions, 8 deletions
diff --git a/nova/tests/test_vsa_volumes.py b/nova/tests/test_vsa_volumes.py
index 7f5a70d3a..adf22077c 100644
--- a/nova/tests/test_vsa_volumes.py
+++ b/nova/tests/test_vsa_volumes.py
@@ -93,9 +93,8 @@ class VsaVolumesTestCase(test.TestCase):
self.assertEqual(volume_ref['status'],
'creating')
- self.volume_api.update(self.context,
- volume_ref,
- {'status': 'available'})
+ self.volume_api.update(self.context, volume_ref,
+ {'status': 'available', 'host': 'fake'})
volume_ref = self.volume_api.get(self.context, volume_ref['id'])
self.volume_api.delete(self.context, volume_ref)
@@ -110,9 +109,9 @@ class VsaVolumesTestCase(test.TestCase):
volume_param = self._default_volume_param()
volume_ref = self.volume_api.create(self.context, **volume_param)
- self.volume_api.update(self.context,
- volume_ref,
- {'status': 'in-use'})
+ self.volume_api.update(self.context, volume_ref,
+ {'status': 'in-use', 'host': 'fake'})
+ volume_ref = self.volume_api.get(self.context, volume_ref['id'])
self.assertRaises(exception.InvalidVolume,
self.volume_api.delete,
self.context, volume_ref)
diff --git a/nova/volume/api.py b/nova/volume/api.py
index 4719f4f1e..3edfa026b 100644
--- a/nova/volume/api.py
+++ b/nova/volume/api.py
@@ -129,8 +129,12 @@ class API(base.Base):
@wrap_check_policy
def delete(self, context, volume):
volume_id = volume['id']
- if volume['status'] != "available":
- msg = _("Volume status must be available")
+ if not volume['host']:
+ # NOTE(vish): scheduling failed, so delete it
+ self.db.volume_destroy(context, volume_id)
+ return
+ if volume['status'] not in ["available", "error"]:
+ msg = _("Volume status must be available or error")
raise exception.InvalidVolume(reason=msg)
now = utils.utcnow()
self.db.volume_update(context, volume_id, {'status': 'deleting',