Enable live migration with qos ports

Previous patches in the blueprint implemented the support for live
migraton with qos ports and added functional test coverage for the
various live migration scenarios. So this patch removes the API check
that rejected such operation and document the new feature.

Change-Id: Ib9ef18fff28c463c9ffe3607d93428b689dc89fb
blueprint: support-move-ops-with-qos-ports-ussuri
This commit is contained in:
Balazs Gibizer 2019-12-14 12:00:40 +01:00
parent 52a03b195e
commit 64cdb82b99
4 changed files with 8 additions and 73 deletions

View File

@ -31,8 +31,8 @@ compute services are upgraded to 20.0.0 (Train) and the
``[upgrade_levels]/compute`` configuration does not prevent the computes from
using the latest RPC version.
As of 21.0.0 (Ussuri), nova supports evacuating servers with neutron ports
having resource requests.
As of 21.0.0 (Ussuri), nova supports evacuating and live migrating servers
with neutron ports having resource requests.
See :nova-doc:`the admin guide <admin/port_with_resource_request.html>` for
administrative details.

View File

@ -128,18 +128,6 @@ class MigrateServerController(wsgi.Controller):
instance = common.get_instance(self.compute_api, context, id,
expected_attrs=['numa_topology'])
# We could potentially move this check to conductor and avoid the
# extra API call to neutron when we support move operations with ports
# having resource requests.
if (common.instance_has_port_with_resource_request(
instance.uuid, self.network_api) and not
common.supports_port_resource_request_during_move(req)):
msg = _("The os-migrateLive action on a server with ports having "
"resource requests, like a port with a QoS minimum "
"bandwidth policy, is not supported with this "
"microversion")
raise exc.HTTPBadRequest(explanation=msg)
try:
self.compute_api.live_migrate(context, instance, block_migration,
disk_over_commit, host, force,

View File

@ -5858,18 +5858,6 @@ class PortResourceRequestBasedSchedulingTestBase(
device_name,
pci_requests.requests[0].spec[0]['parent_ifname'])
def _turn_off_api_check(self):
# The API actively rejecting the move operations with resource
# request so we have to turn off that check.
# TODO(gibi): Remove this when the move operations are supported and
# the API check is removed.
patcher = mock.patch(
'nova.api.openstack.common.'
'supports_port_resource_request_during_move',
return_value=True)
self.addCleanup(patcher.stop)
patcher.start()
class UnsupportedPortResourceRequestBasedSchedulingTest(
PortResourceRequestBasedSchedulingTestBase):
@ -5968,33 +5956,6 @@ class UnsupportedPortResourceRequestBasedSchedulingTest(
"until microversion 2.72.",
six.text_type(ex))
def test_live_migrate_server_with_port_resource_request_old_microversion(
self):
server = self._create_server(
flavor=self.flavor,
networks=[{'port': self.neutron.port_1['id']}])
self._wait_for_state_change(server, 'ACTIVE')
# We need to simulate that the above server has a port that has
# resource request; we cannot boot with such a port but legacy servers
# can exist with such a port.
self._add_resource_request_to_a_bound_port(self.neutron.port_1['id'])
post = {
'os-migrateLive': {
'host': None,
'block_migration': False,
}
}
ex = self.assertRaises(
client.OpenStackApiException,
self.api.post_server_action, server['id'], post)
self.assertEqual(400, ex.response.status_code)
self.assertIn(
'The os-migrateLive action on a server with ports having resource '
'requests', six.text_type(ex))
def test_unshelve_offloaded_server_with_port_resource_request_old_version(
self):
server = self._create_server(
@ -7221,10 +7182,6 @@ class ServerMoveWithPortResourceRequestTest(
qos_sriov_port, self.flavor_with_group_policy)
def test_live_migrate_with_qos_port(self, host=None):
# TODO(gibi): remove this when live migration is fully supported and
# therefore the check is removed from the api
self._turn_off_api_check()
non_qos_normal_port = self.neutron.port_1
qos_normal_port = self.neutron.port_with_resource_request
qos_sriov_port = self.neutron.port_with_sriov_resource_request
@ -7260,10 +7217,6 @@ class ServerMoveWithPortResourceRequestTest(
self.test_live_migrate_with_qos_port(host='host2')
def test_live_migrate_with_qos_port_reschedule_success(self):
# TODO(gibi): remove this when live migration is fully supported and
# therefore the check is removed from the api
self._turn_off_api_check()
self._start_compute('host3')
compute3_rp_uuid = self._get_provider_uuid_by_host('host3')
self._create_networking_rp_tree('host3', compute3_rp_uuid)
@ -7318,10 +7271,6 @@ class ServerMoveWithPortResourceRequestTest(
server, qos_normal_port, qos_sriov_port)
def test_live_migrate_with_qos_port_reschedule_fails(self):
# TODO(gibi): remove this when live migration is fully supported and
# therefore the check is removed from the api
self._turn_off_api_check()
non_qos_normal_port = self.neutron.port_1
qos_normal_port = self.neutron.port_with_resource_request
qos_sriov_port = self.neutron.port_with_sriov_resource_request
@ -7365,10 +7314,6 @@ class ServerMoveWithPortResourceRequestTest(
server, qos_normal_port, qos_sriov_port)
def test_live_migrate_with_qos_port_pci_update_fails(self):
# TODO(gibi): remove this when live migration is fully supported and
# therefore the check is removed from the api
self._turn_off_api_check()
# Update the name of the network device RP of PF2 on host2 to something
# unexpected. This will cause
# update_pci_request_spec_with_allocated_interface_name() to raise
@ -7434,10 +7379,6 @@ class LiveMigrateAbortWithPortResourceRequestTest(
host='host2', binary='nova-compute')[0]['id']
def test_live_migrate_with_qos_port_abort_migration(self):
# TODO(gibi): remove this when live migration is fully supported and
# therefore the check is removed from the api
self._turn_off_api_check()
non_qos_normal_port = self.neutron.port_1
qos_normal_port = self.neutron.port_with_resource_request
qos_sriov_port = self.neutron.port_with_sriov_resource_request

View File

@ -0,0 +1,6 @@
---
features:
- |
The server ``os-migrateLive`` action API now supports servers with neutron
ports having resource requests, e.g. ports that have QoS minimum bandwidth
rules attached.