From 545a4976fc7896e8afee8c70661d109c464c8f44 Mon Sep 17 00:00:00 2001 From: huangtianhua Date: Tue, 26 Nov 2013 17:31:52 +0800 Subject: [PATCH] Fix incorrect exception on os-migrateLive If the server state is conflict to live-migrate, it raises 400(HTTPBadRequest)exception.We should raise HTTPConflict instead of HTTPBadRequest. Change-Id: I40ccb0f268716da20ae4b3de9d295a41a2dba18d Closes-Bug: #1255001 --- .../api/openstack/compute/contrib/admin_actions.py | 3 +++ .../compute/contrib/test_admin_actions.py | 14 +++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/nova/api/openstack/compute/contrib/admin_actions.py b/nova/api/openstack/compute/contrib/admin_actions.py index 632e4f226d7e..ecb3b384161a 100644 --- a/nova/api/openstack/compute/contrib/admin_actions.py +++ b/nova/api/openstack/compute/contrib/admin_actions.py @@ -327,6 +327,9 @@ class AdminActionsController(wsgi.Controller): raise exc.HTTPBadRequest(explanation=ex.format_message()) except exception.InstanceNotFound as e: raise exc.HTTPNotFound(explanation=e.format_message()) + except exception.InstanceInvalidState as state_error: + common.raise_http_conflict_for_instance_invalid_state(state_error, + 'os-migrateLive') except Exception: if host is None: msg = _("Live migration of instance %s to another host " diff --git a/nova/tests/api/openstack/compute/contrib/test_admin_actions.py b/nova/tests/api/openstack/compute/contrib/test_admin_actions.py index 84c3006e9141..375f36938985 100644 --- a/nova/tests/api/openstack/compute/contrib/test_admin_actions.py +++ b/nova/tests/api/openstack/compute/contrib/test_admin_actions.py @@ -174,13 +174,21 @@ class AdminActionsTest(CommonMixin, test.NoDBTestCase): self.mox.StubOutWithMock(self.compute_api, 'get') def test_actions_raise_conflict_on_invalid_state(self): - actions = ['pause', 'unpause', 'suspend', 'resume', 'migrate'] - method_translations = {'migrate': 'resize'} + actions = ['pause', 'unpause', 'suspend', 'resume', 'migrate', + 'os-migrateLive'] + method_translations = {'migrate': 'resize', + 'os-migrateLive': 'live_migrate'} + body_map = {'os-migrateLive': + {'host': 'hostname', + 'block_migration': False, + 'disk_over_commit': False}} + args_map = {'os-migrateLive': ((False, False, 'hostname'), {})} for action in actions: method = method_translations.get(action) self.mox.StubOutWithMock(self.compute_api, method or action) - self._test_invalid_state(action, method=method) + self._test_invalid_state(action, method=method, body_map=body_map, + compute_api_args_map=args_map) # Re-mock this. self.mox.StubOutWithMock(self.compute_api, 'get')