From 26e6c6f0849126402863c49ff197b624d1336581 Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Thu, 11 Mar 2021 17:41:17 +0000 Subject: [PATCH] [OVN] External ports (SR-IOV) QoS is handled by SR-IOV agent OVN QoS extension do not manage the external type ports (SR-IOV); the port QoS policy of those ports is handled by the SR-IOV agent QoS extension. Conflicts: neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/test_qos.py Change-Id: Ibd1caf34a5f707f5ae9ff5973860d4e8338ef224 Closes-Bug: #1918702 (cherry picked from commit f700660b6b11118fa80129a4ef20c3e091da988b) --- .../drivers/ovn/mech_driver/ovsdb/extensions/qos.py | 12 +++++++++--- .../ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py | 5 +++-- .../ovn/mech_driver/ovsdb/extensions/test_qos.py | 8 ++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py index 38ee1e9a20a..8c7741a31ef 100644 --- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py +++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py @@ -23,6 +23,7 @@ from neutron_lib.plugins import directory from neutron_lib.services.qos import constants as qos_consts from oslo_log import log as logging +from neutron.common.ovn import constants as ovn_const from neutron.common.ovn import utils @@ -180,14 +181,19 @@ class OVNClientQosExtension(object): if ovn_rule: txn.add(self._driver._nb_idl.qos_add(**ovn_rule)) - def create_port(self, txn, port): - self.update_port(txn, port, None, reset=True) + def create_port(self, txn, port, port_type=None): + self.update_port(txn, port, None, reset=True, port_type=port_type) def delete_port(self, txn, port): self.update_port(txn, port, None, delete=True) def update_port(self, txn, port, original_port, reset=False, delete=False, - qos_rules=None): + qos_rules=None, port_type=None): + if port_type == ovn_const.LSP_TYPE_EXTERNAL: + # External ports (SR-IOV) QoS is handled the SR-IOV agent QoS + # extension. + return + if (not reset and not original_port) and not delete: # If there is no information about the previous QoS policy, do not # make any change, unless the port is new or the QoS information diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py index b04d308b17d..855194283b3 100644 --- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py +++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py @@ -419,7 +419,7 @@ class OVNClient(object): if self.is_dns_required_for_port(port): self.add_txns_to_sync_port_dns_records(txn, port) - self._qos_driver.create_port(txn, port) + self._qos_driver.create_port(txn, port, port_type=port_info.type) db_rev.bump_revision(context, port, ovn_const.TYPE_PORTS) @@ -564,7 +564,8 @@ class OVNClient(object): utils.is_lsp_trusted(port)): self._del_port_from_drop_port_group(port['id'], txn) - self._qos_driver.update_port(txn, port, port_object) + self._qos_driver.update_port(txn, port, port_object, + port_type=port_info.type) if self.is_dns_required_for_port(port): self.add_txns_to_sync_port_dns_records( diff --git a/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/test_qos.py b/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/test_qos.py index 28886d46e28..18aba4647a5 100644 --- a/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/test_qos.py +++ b/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/test_qos.py @@ -21,6 +21,7 @@ from neutron_lib.services.qos import constants as qos_constants from oslo_config import cfg from oslo_utils import uuidutils +from neutron.common.ovn import constants as ovn_const from neutron.core_extensions import qos as core_qos from neutron import manager from neutron.objects import network as network_obj @@ -253,6 +254,13 @@ class TestOVNClientQosExtension(test_plugin.Ml2PluginV2TestCase): self.mock_rules.assert_called_once_with( mock.ANY, port.id, port.network_id, self.qos_policies[0].id, None) + # External port, OVN QoS extension does not apply. + self.mock_rules.reset_mock() + port.qos_policy_id = self.qos_policies[0].id + self.qos_driver.update_port(mock.ANY, port, original_port, + port_type=ovn_const.LSP_TYPE_EXTERNAL) + self.mock_rules.assert_not_called() + def test_delete_port(self): self.mock_rules.reset_mock() self.qos_driver.delete_port(mock.ANY, self.ports[1])