From 9ac59e4b4a3b40861308c71bbacc379dacb2bd20 Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Fri, 28 Apr 2023 16:34:22 +0200 Subject: Avoid retrieving ports if network list is empty In ``QoSPlugin._get_ports_with_policy``, if the network IDs list is empty, the SQLAlchemy throws the following warning: SELECT statement has a cartesian product between FROM element(s) "subports_1", "ports", "portnumaaffinitypolicies_1", "testportextensions_1", "portuplinkstatuspropagation_1", "portdataplanestatuses_1", "standardattributes_2", "portdeviceprofiles_1", "ml2_port_bindings_1", "portsecuritybindings_1", "portdnses_1", "securitygroupportbindings_1", "qos_network_policy_bindings_1", "qos_port_policy_bindings_1", "trunks_1", "standardattributes_1" and FROM element "networks". Apply join condition(s) between each element to resolve. This patch avoids this query by checking the network IDs list. If the list is empty, the expected port list will be too. This is also a small optimization because we are skipping the port query. This patch is also applying the same logic to the second query in this method. Closes-Bug: #2018000 Change-Id: Ia5380bc78cc1d0136e11cc4692069279419e285e --- neutron/services/qos/qos_plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'neutron') diff --git a/neutron/services/qos/qos_plugin.py b/neutron/services/qos/qos_plugin.py index 776dae6da2..d4f5d5038e 100644 --- a/neutron/services/qos/qos_plugin.py +++ b/neutron/services/qos/qos_plugin.py @@ -323,7 +323,7 @@ class QoSPlugin(qos.QoSPluginBase): def _get_ports_with_policy(self, context, policy): networks_ids = policy.get_bound_networks() ports_with_net_policy = ports_object.Port.get_objects( - context, network_id=networks_ids) + context, network_id=networks_ids) if networks_ids else [] # Filter only this ports which don't have overwritten policy ports_with_net_policy = [ @@ -333,7 +333,7 @@ class QoSPlugin(qos.QoSPluginBase): ports_ids = policy.get_bound_ports() ports_with_policy = ports_object.Port.get_objects( - context, id=ports_ids) + context, id=ports_ids) if ports_ids else [] return list(set(ports_with_policy + ports_with_net_policy)) def _validate_create_port_callback(self, resource, event, trigger, -- cgit v1.2.1