From ece6a9a7acab20d5a39f54784427258d54b72cfd Mon Sep 17 00:00:00 2001 From: yatinkarel Date: Tue, 28 May 2024 13:11:58 +0530 Subject: [PATCH] [stable only] Do not fail on missing logical router ports set_gateway_mtu runs for all the gateway ports for a network and if one of the ports get's deleted in meanwhile whole transaction fails. To handle this we need to add if_exists=True to the transaction but for that it needs to be supported in ovsdbapp. It's fixed in ovsdbapp with [1] but would require to bump ovsdbapp minimal version in requirements.txt which we normally don't do for stable branches. So using "update_lrouter_port" instead as that have the required option available. Before [2] that was only used but during the switch if_exists part was missed. [1] https://review.opendev.org/q/I56685478214aae7b6d3a2a3187297ad4eb1869a3 [2] https://review.opendev.org/c/openstack/neutron/+/762695 Closes-Bug: #2065701 Related-Bug: #2060163 Change-Id: I447990509cdea9830228d3bc92a97062cc57a472 (cherry picked from commit 5bdd0efb3970a52c60043f166bc728778ac3f395) Conflicts: neutron/tests/unit/fake_resources.py --- .../plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py | 3 ++- neutron/tests/unit/fake_resources.py | 1 - .../plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py | 4 ++-- neutron/tests/unit/services/ovn_l3/test_plugin.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) 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 3e7bc5c01f3..266e97f0b8c 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 @@ -2093,7 +2093,8 @@ def set_gateway_mtu(self, context, prov_net, txn=None): for port in ports: lrp_name = utils.ovn_lrouter_port_name(port['id']) options = self._gen_router_port_options(port, prov_net) - commands.append(self._nb_idl.lrp_set_options(lrp_name, **options)) + commands.append(self._nb_idl.update_lrouter_port( + lrp_name, if_exists=True, **options)) self._transaction(commands, txn=txn) def update_network(self, context, network, original_network=None): diff --git a/neutron/tests/unit/fake_resources.py b/neutron/tests/unit/fake_resources.py index 003db6abb9c..bca73eeac00 100644 --- a/neutron/tests/unit/fake_resources.py +++ b/neutron/tests/unit/fake_resources.py @@ -62,7 +62,6 @@ def __init__(self, **kwargs): self.get_acls_for_lswitches = mock.Mock() self.create_lrouter = mock.Mock() self.lrp_del = mock.Mock() - self.lrp_set_options = mock.Mock() self.update_lrouter = mock.Mock() self.delete_lrouter = mock.Mock() self.add_lrouter_port = mock.Mock() diff --git a/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py b/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py index b0c77ecd4d2..4c61c946c2c 100644 --- a/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py +++ b/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py @@ -2446,8 +2446,8 @@ def _test_update_network_fragmentation(self, new_mtu, expected_opts, grps): self.mech_driver.update_network_postcommit(fake_ctx) lrp_name = ovn_utils.ovn_lrouter_port_name(port['port']['id']) - self.nb_ovn.lrp_set_options.assert_called_once_with( - lrp_name, **expected_opts) + self.nb_ovn.update_lrouter_port.assert_called_once_with( + lrp_name, if_exists=True, **expected_opts) def test_update_network_need_to_frag_enabled(self): ovn_conf.cfg.CONF.set_override('ovn_emit_need_to_frag', True, diff --git a/neutron/tests/unit/services/ovn_l3/test_plugin.py b/neutron/tests/unit/services/ovn_l3/test_plugin.py index 53d39577d3d..fb686b36cbc 100644 --- a/neutron/tests/unit/services/ovn_l3/test_plugin.py +++ b/neutron/tests/unit/services/ovn_l3/test_plugin.py @@ -1678,7 +1678,7 @@ def test_add_router_interface_need_to_frag_enabled_then_remove( self.l3_inst._nb_ovn.add_lrouter_port.assert_called_once_with( **fake_router_port_assert) # Since if_exists = True it will safely return - self.l3_inst._nb_ovn.lrp_set_options( + self.l3_inst._nb_ovn.update_lrouter_port( name='lrp-router-port-id', if_exists=True, options=fake_router_port_assert) # If no if_exists is provided, it is defaulted to true, so this