Merge "migrate: Add bw min service level check of source compute"
This commit is contained in:
commit
e01b628581
|
@ -27,10 +27,13 @@ from nova.compute import api as compute
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova.i18n import _
|
from nova.i18n import _
|
||||||
from nova import network
|
from nova import network
|
||||||
|
from nova import objects
|
||||||
from nova.policies import migrate_server as ms_policies
|
from nova.policies import migrate_server as ms_policies
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
MIN_COMPUTE_MOVE_BANDWIDTH = 39
|
||||||
|
|
||||||
|
|
||||||
class MigrateServerController(wsgi.Controller):
|
class MigrateServerController(wsgi.Controller):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -58,14 +61,25 @@ class MigrateServerController(wsgi.Controller):
|
||||||
# We could potentially move this check to conductor and avoid the
|
# We could potentially move this check to conductor and avoid the
|
||||||
# extra API call to neutron when we support move operations with ports
|
# extra API call to neutron when we support move operations with ports
|
||||||
# having resource requests.
|
# having resource requests.
|
||||||
if (common.instance_has_port_with_resource_request(
|
if common.instance_has_port_with_resource_request(
|
||||||
context, instance.uuid, self.network_api) and not
|
context, instance.uuid, self.network_api):
|
||||||
common.supports_port_resource_request_during_move(req)):
|
if not common.supports_port_resource_request_during_move(req):
|
||||||
msg = _("The migrate action on a server with ports having "
|
msg = _("The migrate action on a server with ports having "
|
||||||
"resource requests, like a port with a QoS minimum "
|
"resource requests, like a port with a QoS minimum "
|
||||||
"bandwidth policy, is not supported with this "
|
"bandwidth policy, is not supported with this "
|
||||||
"microversion")
|
"microversion")
|
||||||
raise exc.HTTPBadRequest(explanation=msg)
|
raise exc.HTTPBadRequest(explanation=msg)
|
||||||
|
|
||||||
|
# TODO(gibi): Remove when nova only supports compute newer than
|
||||||
|
# Train
|
||||||
|
source_service = objects.Service.get_by_host_and_binary(
|
||||||
|
context, instance.host, 'nova-compute')
|
||||||
|
if source_service.version < MIN_COMPUTE_MOVE_BANDWIDTH:
|
||||||
|
msg = _("The migrate action on a server with ports having "
|
||||||
|
"resource requests, like a port with a QoS "
|
||||||
|
"minimum bandwidth policy, is not yet supported "
|
||||||
|
"on the source compute")
|
||||||
|
raise exc.HTTPConflict(explanation=msg)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.compute_api.resize(req.environ['nova.context'], instance,
|
self.compute_api.resize(req.environ['nova.context'], instance,
|
||||||
|
|
|
@ -296,6 +296,29 @@ class MigrateServerTestsV21(admin_only_action_common.CommonTests):
|
||||||
expected_exc=webob.exc.HTTPInternalServerError,
|
expected_exc=webob.exc.HTTPInternalServerError,
|
||||||
check_response=False)
|
check_response=False)
|
||||||
|
|
||||||
|
@mock.patch('nova.api.openstack.common.'
|
||||||
|
'supports_port_resource_request_during_move',
|
||||||
|
return_value=True)
|
||||||
|
@mock.patch('nova.objects.Service.get_by_host_and_binary')
|
||||||
|
@mock.patch('nova.api.openstack.common.'
|
||||||
|
'instance_has_port_with_resource_request', return_value=True)
|
||||||
|
def test_migrate_with_bandwidth_from_old_compute_not_supported(
|
||||||
|
self, mock_has_res_req, mock_get_service, mock_support):
|
||||||
|
instance = self._stub_instance_get()
|
||||||
|
|
||||||
|
mock_get_service.return_value = objects.Service(host=instance['host'])
|
||||||
|
mock_get_service.return_value.version = 38
|
||||||
|
|
||||||
|
self.assertRaises(
|
||||||
|
webob.exc.HTTPConflict, self.controller._migrate, self.req,
|
||||||
|
instance['uuid'], body={'migrate': None})
|
||||||
|
|
||||||
|
mock_has_res_req.assert_called_once_with(
|
||||||
|
self.req.environ['nova.context'], instance['uuid'],
|
||||||
|
self.controller.network_api)
|
||||||
|
mock_get_service.assert_called_once_with(
|
||||||
|
self.req.environ['nova.context'], instance['host'], 'nova-compute')
|
||||||
|
|
||||||
|
|
||||||
class MigrateServerTestsV225(MigrateServerTestsV21):
|
class MigrateServerTestsV225(MigrateServerTestsV21):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue