Skip to content

Commit 1a81b9f

Browse files
committed
Revert: Ensure traffic is not centralized if DVR is enabled
This patch breaks FIPs on LBs when Neutron is restarted. See bug: https://bugs.launchpad.net/neutron/+bug/2042938
1 parent 0284959 commit 1a81b9f

File tree

3 files changed

+15
-33
lines changed

3 files changed

+15
-33
lines changed

neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,7 +1056,7 @@ def get_workers(self):
10561056
# See doc/source/design/ovn_worker.rst for more details.
10571057
return [worker.MaintenanceWorker()]
10581058

1059-
def _update_dnat_entry_if_needed(self, port_id):
1059+
def _update_dnat_entry_if_needed(self, port_id, up=True):
10601060
"""Update DNAT entry if using distributed floating ips."""
10611061
if not self.nb_ovn:
10621062
self.nb_ovn = self._ovn_client._nb_idl
@@ -1077,9 +1077,9 @@ def _update_dnat_entry_if_needed(self, port_id):
10771077
{ovn_const.OVN_FIP_EXT_MAC_KEY:
10781078
nat['external_mac']})).execute()
10791079

1080-
if ovn_conf.is_ovn_distributed_floating_ip():
1081-
mac = nat['external_ids'].get(ovn_const.OVN_FIP_EXT_MAC_KEY)
1082-
if mac and nat['external_mac'] != mac:
1080+
if up and ovn_conf.is_ovn_distributed_floating_ip():
1081+
mac = nat['external_ids'][ovn_const.OVN_FIP_EXT_MAC_KEY]
1082+
if nat['external_mac'] != mac:
10831083
LOG.debug("Setting external_mac of port %s to %s",
10841084
port_id, mac)
10851085
self.nb_ovn.db_set(
@@ -1147,7 +1147,7 @@ def set_port_status_down(self, port_id):
11471147
# to prevent another entity from bypassing the block with its own
11481148
# port status update.
11491149
LOG.info("OVN reports status down for port: %s", port_id)
1150-
self._update_dnat_entry_if_needed(port_id)
1150+
self._update_dnat_entry_if_needed(port_id, False)
11511151
admin_context = n_context.get_admin_context()
11521152
try:
11531153
db_port = ml2_db.get_port(admin_context, port_id)

neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,7 +1130,7 @@ def _test_set_port_status_down(self, is_compute_port=False):
11301130
resources.PORT,
11311131
provisioning_blocks.L2_AGENT_ENTITY
11321132
)
1133-
ude.assert_called_once_with(port1['port']['id'])
1133+
ude.assert_called_once_with(port1['port']['id'], False)
11341134

11351135
# If the port does NOT bellong to compute, do not notify Nova
11361136
# about it's status changes
@@ -1175,7 +1175,7 @@ def test_set_port_status_concurrent_delete(self):
11751175
side_effect=exc) as apc, \
11761176
mock.patch.object(self.mech_driver,
11771177
'_update_dnat_entry_if_needed') as ude:
1178-
self.mech_driver.set_port_status_down(port1['port']['id'])
1178+
self.mech_driver.set_port_status_down(port1['port']['id'], False)
11791179
apc.assert_called_once_with(
11801180
mock.ANY,
11811181
port1['port']['id'],
@@ -2376,40 +2376,32 @@ def test_agent_with_nb_cfg_timestamp_not_timeout(self):
23762376
self.assertTrue(agent.alive, "Agent of type %s alive=%s" % (
23772377
agent.agent_type, agent.alive))
23782378

2379-
def _test__update_dnat_entry_if_needed(self, dvr=True):
2380-
if dvr:
2381-
ovn_conf.cfg.CONF.set_override(
2382-
'enable_distributed_floating_ip', True, group='ovn')
2379+
def _test__update_dnat_entry_if_needed(self, up=True):
2380+
ovn_conf.cfg.CONF.set_override(
2381+
'enable_distributed_floating_ip', True, group='ovn')
23832382
port_id = 'fake-port-id'
23842383
fake_ext_mac_key = 'fake-ext-mac-key'
23852384
fake_nat_uuid = uuidutils.generate_uuid()
23862385
nat_row = fakes.FakeOvsdbRow.create_one_ovsdb_row(
23872386
attrs={'_uuid': fake_nat_uuid, 'external_ids': {
23882387
ovn_const.OVN_FIP_EXT_MAC_KEY: fake_ext_mac_key},
23892388
'external_mac': 'aa:aa:aa:aa:aa:aa'})
2390-
23912389
fake_db_find = mock.Mock()
23922390
fake_db_find.execute.return_value = [nat_row]
23932391
self.nb_ovn.db_find.return_value = fake_db_find
2394-
2395-
self.mech_driver._update_dnat_entry_if_needed(port_id)
2396-
2397-
if dvr:
2392+
self.mech_driver._update_dnat_entry_if_needed(port_id, up=up)
2393+
if up:
23982394
# Assert that we are setting the external_mac in the NAT table
23992395
self.nb_ovn.db_set.assert_called_once_with(
24002396
'NAT', fake_nat_uuid, ('external_mac', fake_ext_mac_key))
2401-
self.nb_ovn.db_clear.assert_not_called()
24022397
else:
2403-
self.nb_ovn.db_set.assert_not_called()
24042398
# Assert that we are cleaning the external_mac from the NAT table
24052399
self.nb_ovn.db_clear.assert_called_once_with(
24062400
'NAT', fake_nat_uuid, 'external_mac')
2407-
2408-
def test__update_dnat_entry_if_needed_dvr(self):
2401+
def test__update_dnat_entry_if_needed_up(self):
24092402
self._test__update_dnat_entry_if_needed()
2410-
2411-
def test__update_dnat_entry_if_needed_no_dvr(self):
2412-
self._test__update_dnat_entry_if_needed(dvr=False)
2403+
def test__update_dnat_entry_if_needed_down(self):
2404+
self._test__update_dnat_entry_if_needed(up=False)
24132405

24142406
@mock.patch('neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.'
24152407
'ovn_client.OVNClient._get_router_ports')

releasenotes/notes/dvr-external-mac-934409413e515eb2.yaml

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)