Skip to content

Commit 34a760a

Browse files
authored
Merge pull request #1041 from rackerlabs/stop-stuff-deletion
fix: router iface removal: switch to PRECOMMIT_DELETE
2 parents 7626945 + a201148 commit 34a760a

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

python/neutron-understack/neutron_understack/neutron_understack_mech.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def subscribe(self):
6464
registry.subscribe(
6565
routers.handle_router_interface_removal,
6666
resources.PORT,
67-
events.BEFORE_DELETE,
67+
events.PRECOMMIT_DELETE,
6868
cancellable=True,
6969
)
7070

python/neutron-understack/neutron_understack/routers.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,13 @@ def handle_router_interface_removal(_resource, _event, trigger, payload) -> None
219219
In situation 2, we don't have to do anything. Router-specific port gets
220220
deleted by Neutron and segment-shared port stays around.
221221
"""
222-
port = payload.metadata["port"]
223-
network_id = port["network_id"]
222+
LOG.debug(
223+
"handle_router_interface_removal received %(payload)s", {"payload": payload}
224+
)
225+
port = payload.metadata["port_db"]
226+
network_id = payload.metadata["network"]["id"]
224227

225-
if port["device_owner"] not in ROUTER_INTERFACE_AND_GW:
228+
if port.device_owner not in ROUTER_INTERFACE_AND_GW:
226229
return
227230

228231
if not is_only_router_port_on_network(network_id):

python/neutron-understack/neutron_understack/tests/conftest.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,15 @@ def port_payload(network_id) -> DBEventPayload:
338338
return DBEventPayload("context", metadata=metadata)
339339

340340

341+
@pytest.fixture
342+
def port_db_payload(network) -> DBEventPayload:
343+
metadata = {
344+
"port_db": PortModel(device_owner=p_const.DEVICE_OWNER_ROUTER_GW),
345+
"network": network,
346+
}
347+
return DBEventPayload("context", metadata=metadata)
348+
349+
341350
@pytest.fixture
342351
def ml2_understack_conf(mocker, ucvni_group_id) -> None:
343352
mocker.patch(

python/neutron-understack/neutron_understack/tests/test_routers.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,22 @@ def test_when_successful(self, mocker, port_id, trunk_id):
7979

8080

8181
class TestHandleRouterInterfaceRemoval:
82-
def test_case_for_non_router(self, mocker, port_payload):
82+
def test_case_for_non_router(self, mocker, port_db_payload):
8383
mock_sb_removal = mocker.patch(
8484
"neutron_understack.routers.handle_subport_removal"
8585
)
8686
mock_localnet_removal = mocker.patch(
8787
"neutron_understack.routers.delete_uplink_port"
8888
)
8989

90-
port_payload.metadata["port"]["device_owner"] = "not_a_router"
91-
handle_router_interface_removal(None, None, None, port_payload)
90+
port_db_payload.metadata["port_db"].device_owner = "not_a_router"
91+
92+
handle_router_interface_removal(None, None, None, port_db_payload)
9293

9394
mock_sb_removal.assert_not_called()
9495
mock_localnet_removal.assert_not_called()
9596

96-
def test_when_network_in_use(self, mocker, port_payload):
97+
def test_when_network_in_use(self, mocker, port_db_payload):
9798
mock_sb_removal = mocker.patch(
9899
"neutron_understack.routers.handle_subport_removal"
99100
)
@@ -105,12 +106,14 @@ def test_when_network_in_use(self, mocker, port_payload):
105106
return_value=False,
106107
)
107108

108-
handle_router_interface_removal(None, None, None, port_payload)
109+
handle_router_interface_removal(None, None, None, port_db_payload)
109110

110111
mock_sb_removal.assert_not_called()
111112
mock_localnet_removal.assert_not_called()
112113

113-
def test_last_port_on_network(self, mocker, port_object, port_payload, network_id):
114+
def test_last_port_on_network(
115+
self, mocker, port_object, port_db_payload, network_id
116+
):
114117
mock_sb_removal = mocker.patch(
115118
"neutron_understack.routers.handle_subport_removal"
116119
)
@@ -133,7 +136,7 @@ def test_last_port_on_network(self, mocker, port_object, port_payload, network_i
133136
)
134137
delete_shared_port = mocker.patch.object(port_object, "delete")
135138

136-
handle_router_interface_removal(None, None, None, port_payload)
139+
handle_router_interface_removal(None, None, None, port_db_payload)
137140

138141
mock_sb_removal.assert_called_once_with(port_object)
139142
mock_localnet_removal.assert_called_once_with(fake_segment, str(network_id))

0 commit comments

Comments
 (0)