diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-03-14 09:26:40 -0700 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-03-14 15:20:27 -0700 |
| commit | 22b484a6d0b65c2a41fd4c730a5ebddf98c70c84 (patch) | |
| tree | 349a5d52a23abd63e2d8f978305d14ce5da049a6 | |
| parent | f40357574245d2e3b8cb7995cb27adc8e9b99175 (diff) | |
| download | nova-22b484a6d0b65c2a41fd4c730a5ebddf98c70c84.tar.gz nova-22b484a6d0b65c2a41fd4c730a5ebddf98c70c84.tar.xz nova-22b484a6d0b65c2a41fd4c730a5ebddf98c70c84.zip | |
Allow errored volumes to be deleted
* Allow volumes with no host set to be deleted from db
* Allow volumes in state error to be deleted
* Replicates code from nova-manage command
* Fixes bug 953594
Change-Id: Ia8b4594a626df58f030406b12dd003f5c9215612
| -rw-r--r-- | nova/tests/test_vsa_volumes.py | 11 | ||||
| -rw-r--r-- | nova/volume/api.py | 8 |
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', |
