Return 400 when compute host is not found

Previously user was getting a 500 error code for ComputeHostNotFound
if they are using latest microversion that does live migration in
async. This patches changes return response to 400 as 500 internal
server error should not be returned to the user for failures due to
user error that can be fixed by changing to request on client side.

Change-Id: I7a9de211ecfaa7f2816fbf8bcd73ebbdd990643c
closes-bug:1643623
This commit is contained in:
Sivasathurappan Radhakrishnan 2017-03-20 03:13:13 +00:00 committed by Rajesh Tailor
parent 588d9c0a89
commit fb68fd12e2
2 changed files with 22 additions and 2 deletions

View File

@ -108,7 +108,6 @@ class MigrateServerController(wsgi.Controller):
raise exc.HTTPNotFound(explanation=e.format_message())
except (exception.NoValidHost,
exception.ComputeServiceUnavailable,
exception.ComputeHostNotFound,
exception.InvalidHypervisorType,
exception.InvalidCPUInfo,
exception.UnableToMigrateToSelf,
@ -127,6 +126,8 @@ class MigrateServerController(wsgi.Controller):
raise exc.HTTPBadRequest(explanation=ex.format_message())
except exception.InstanceIsLocked as e:
raise exc.HTTPConflict(explanation=e.format_message())
except exception.ComputeHostNotFound as e:
raise exc.HTTPBadRequest(explanation=e.format_message())
except exception.InstanceInvalidState as state_error:
common.raise_http_conflict_for_instance_invalid_state(state_error,
'os-migrateLive', id)

View File

@ -433,8 +433,27 @@ class MigrateServerTestsV234(MigrateServerTestsV230):
def test_migrate_live_migration_with_old_nova_not_supported(self):
pass
def test_migrate_live_compute_host_not_found(self):
exc = exception.ComputeHostNotFound(
reason="Compute host %(host)s could not be found.",
host='hostname')
self.mox.StubOutWithMock(self.compute_api, 'live_migrate')
instance = self._stub_instance_get()
self.compute_api.live_migrate(self.context, instance, None,
self.disk_over_commit, 'hostname',
self.force, self.async).AndRaise(exc)
self.mox.ReplayAll()
body = {'os-migrateLive':
{'host': 'hostname', 'block_migration': 'auto'}}
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller._migrate_live,
self.req, instance.uuid, body=body)
def test_migrate_live_unexpected_error(self):
exc = exception.NoValidHost(reason="No valid host found")
exc = exception.InvalidHypervisorType(
reason="The supplied hypervisor type of is invalid.")
self.mox.StubOutWithMock(self.compute_api, 'live_migrate')
instance = self._stub_instance_get()
self.compute_api.live_migrate(self.context, instance, None,