diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-01-05 17:03:22 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-01-05 17:03:22 +0000 |
| commit | d41ea536ba55e8285e2db88415f09c80a799acfa (patch) | |
| tree | b78093b442827ebd0db3f61cc94323af8bf05e5c | |
| parent | d7887419f4e28cd948e3bdd8644f5e329a81695c (diff) | |
| parent | 18f72f29a92733e56d8641e48b2099df1b8b30f4 (diff) | |
| download | nova-d41ea536ba55e8285e2db88415f09c80a799acfa.tar.gz nova-d41ea536ba55e8285e2db88415f09c80a799acfa.tar.xz nova-d41ea536ba55e8285e2db88415f09c80a799acfa.zip | |
Merge "Return 409s instead of 500s when deleting certain instances."
| -rw-r--r-- | nova/api/openstack/v2/servers.py | 4 | ||||
| -rw-r--r-- | nova/tests/api/openstack/v2/test_servers.py | 34 |
2 files changed, 38 insertions, 0 deletions
diff --git a/nova/api/openstack/v2/servers.py b/nova/api/openstack/v2/servers.py index d98d532dc..bab2976f9 100644 --- a/nova/api/openstack/v2/servers.py +++ b/nova/api/openstack/v2/servers.py @@ -575,6 +575,10 @@ class Controller(wsgi.Controller): self._delete(req.environ['nova.context'], id) except exception.NotFound: raise exc.HTTPNotFound() + except exception.InstanceInvalidState as state_error: + state = state_error.kwargs.get("state") + msg = _("Unable to delete instance when %s") % state + raise exc.HTTPConflict(explanation=msg) def _get_key_name(self, req, body): if 'server' in body: diff --git a/nova/tests/api/openstack/v2/test_servers.py b/nova/tests/api/openstack/v2/test_servers.py index 03627c833..6272eb5eb 100644 --- a/nova/tests/api/openstack/v2/test_servers.py +++ b/nova/tests/api/openstack/v2/test_servers.py @@ -1200,6 +1200,40 @@ class ServersControllerTest(test.TestCase): self.assertEqual(self.server_delete_called, True) + def test_delete_server_instance_while_building(self): + req = fakes.HTTPRequest.blank('/v2/fake/servers/%s' % FAKE_UUID) + req.method = 'DELETE' + + self.server_delete_called = False + + new_return_server = return_server_with_attributes( + vm_state=vm_states.BUILDING) + self.stubs.Set(nova.db, 'instance_get', new_return_server) + + def instance_destroy_mock(context, id): + self.server_delete_called = True + self.stubs.Set(nova.db, 'instance_destroy', instance_destroy_mock) + + with self.assertRaises(webob.exc.HTTPConflict): + self.controller.delete(req, FAKE_UUID) + + def test_delete_server_instance_while_resize(self): + req = fakes.HTTPRequest.blank('/v2/fake/servers/%s' % FAKE_UUID) + req.method = 'DELETE' + + self.server_delete_called = False + + new_return_server = return_server_with_attributes( + vm_state=vm_states.RESIZING) + self.stubs.Set(nova.db, 'instance_get', new_return_server) + + def instance_destroy_mock(context, id): + self.server_delete_called = True + self.stubs.Set(nova.db, 'instance_destroy', instance_destroy_mock) + + with self.assertRaises(webob.exc.HTTPConflict): + self.controller.delete(req, FAKE_UUID) + class ServerStatusTest(test.TestCase): |
