Merge "Return 409s instead of 500s when deleting certain instances."
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user