diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-03-15 01:26:31 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-03-15 01:26:31 +0000 |
| commit | 3cf1b0312c3e18228c38a02f4d71b768dbbb7e53 (patch) | |
| tree | 766b315ac224b468d7f62203931b48f0faf0b693 /nova | |
| parent | e0d14ca213198500014bf53d5843fa07aaded366 (diff) | |
| parent | 22b484a6d0b65c2a41fd4c730a5ebddf98c70c84 (diff) | |
Merge "Allow errored volumes to be deleted"
Diffstat (limited to 'nova')
| -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', |
