summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-03-31 23:59:29 +0000
committerGerrit Code Review <review@openstack.org>2012-03-31 23:59:29 +0000
commitf355d95494dd242a3f6c34b21c7f6c3da8f3b6f3 (patch)
tree7fe857ed6f5eea869166fcfb9066c67ba07d14fb
parentfbdd558da643ba30f69b3459d1eb96f96ea627d2 (diff)
parente691eaf58b4c1ec4019982eb5b2604270c1ded09 (diff)
downloadnova-f355d95494dd242a3f6c34b21c7f6c3da8f3b6f3.tar.gz
Merge "Allow snapshots in error state to be deleted." into milestone-proposed
-rw-r--r--nova/tests/test_volume.py20
-rw-r--r--nova/volume/api.py4
2 files changed, 22 insertions, 2 deletions
diff --git a/nova/tests/test_volume.py b/nova/tests/test_volume.py
index be589d3e24..fca593c7c2 100644
--- a/nova/tests/test_volume.py
+++ b/nova/tests/test_volume.py
@@ -275,7 +275,27 @@ class VolumeTestCase(test.TestCase):
volume_api.delete,
self.context,
volume)
+ self.volume.delete_snapshot(self.context, snapshot_id)
+ self.volume.delete_volume(self.context, volume['id'])
+
+ def test_can_delete_errored_snapshot(self):
+ """Test snapshot can be created and deleted."""
+ volume = self._create_volume()
+ self.volume.create_volume(self.context, volume['id'])
+ snapshot_id = self._create_snapshot(volume['id'])
+ self.volume.create_snapshot(self.context, volume['id'], snapshot_id)
+ snapshot = db.snapshot_get(context.get_admin_context(),
+ snapshot_id)
+
+ volume_api = nova.volume.api.API()
+
+ snapshot['status'] = 'badstatus'
+ self.assertRaises(exception.InvalidVolume,
+ volume_api.delete_snapshot,
+ self.context,
+ snapshot)
+ snapshot['status'] = 'error'
self.volume.delete_snapshot(self.context, snapshot_id)
self.volume.delete_volume(self.context, volume['id'])
diff --git a/nova/volume/api.py b/nova/volume/api.py
index 26d56c0578..76de55131e 100644
--- a/nova/volume/api.py
+++ b/nova/volume/api.py
@@ -321,8 +321,8 @@ class API(base.Base):
@wrap_check_policy
def delete_snapshot(self, context, snapshot):
- if snapshot['status'] != "available":
- msg = _("must be available")
+ if snapshot['status'] not in ["available", "error"]:
+ msg = _("Volume Snapshot status must be available or error")
raise exception.InvalidVolume(reason=msg)
self.db.snapshot_update(context, snapshot['id'],
{'status': 'deleting'})