diff options
author | Jenkins <jenkins@review.openstack.org> | 2012-03-31 23:59:29 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2012-03-31 23:59:29 +0000 |
commit | f355d95494dd242a3f6c34b21c7f6c3da8f3b6f3 (patch) | |
tree | 7fe857ed6f5eea869166fcfb9066c67ba07d14fb | |
parent | fbdd558da643ba30f69b3459d1eb96f96ea627d2 (diff) | |
parent | e691eaf58b4c1ec4019982eb5b2604270c1ded09 (diff) | |
download | nova-f355d95494dd242a3f6c34b21c7f6c3da8f3b6f3.tar.gz |
Merge "Allow snapshots in error state to be deleted." into milestone-proposed
-rw-r--r-- | nova/tests/test_volume.py | 20 | ||||
-rw-r--r-- | nova/volume/api.py | 4 |
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'}) |