Skip to content

Commit 5ae479c

Browse files
committed
Delete the "Chassis_Private" register when deleting an agent
The method ``delete_agent`` [1] now deletes both the OVN SB "Chassis" and "Chassis_Private" registers when called. [1]https://github.com/openstack/neutron/blob/ad81687e2955f494c28e2122763a2332afd3d26d/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py#L1400-L1401 Closes-Bug: #2023171 Change-Id: Ibb1285f61c172d2b6e281f41315415ce8b8526e7 (cherry picked from commit 9ca0e34)
1 parent 410ce2f commit 5ae479c

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from oslo_db import exception as os_db_exc
4141
from oslo_log import log
4242
from oslo_utils import timeutils
43+
from ovsdbapp.backend.ovs_idl import idlutils
4344

4445
from neutron._i18n import _
4546
from neutron.common.ovn import acl as ovn_acl
@@ -1322,6 +1323,14 @@ def delete_agent(self, context, id, _driver=None):
13221323
chassis_name = agent['configurations']['chassis_name']
13231324
_driver.sb_ovn.chassis_del(chassis_name, if_exists=True).execute(
13241325
check_error=True)
1326+
if _driver.sb_ovn.is_table_present('Chassis_Private'):
1327+
# TODO(ralonsoh): implement the corresponding chassis_private
1328+
# commands in ovsdbapp.
1329+
try:
1330+
_driver.sb_ovn.db_destroy('Chassis_Private', chassis_name).execute(
1331+
check_error=True)
1332+
except idlutils.RowNotFound:
1333+
pass
13251334
# Send a specific event that all API workers can get to delete the agent
13261335
# from their caches. Ideally we could send a single transaction that both
13271336
# created and deleted the key, but alas python-ovs is too "smart"

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,19 @@ def _create_test_agent(self):
11691169
_, status = self.plugin.create_or_update_agent(self.context, agent)
11701170
return status['id']
11711171

1172+
def _check_chassis_registers(self, present=True):
1173+
chassis = self.sb_api.lookup('Chassis', self.chassis, default=None)
1174+
chassis_name = chassis.name if chassis else None
1175+
if self.sb_api.is_table_present('Chassis_Private'):
1176+
ch_private = self.sb_api.lookup(
1177+
'Chassis_Private', self.chassis, default=None)
1178+
ch_private_name = ch_private.name if ch_private else None
1179+
self.assertEqual(chassis_name, ch_private_name)
1180+
if present:
1181+
self.assertEqual(self.chassis, chassis_name)
1182+
else:
1183+
self.assertIsNone(chassis)
1184+
11721185
def test_agent_show(self):
11731186
for agent_id in self.agent_types.values():
11741187
self.assertTrue(self.plugin.get_agent(self.context, agent_id))
@@ -1217,12 +1230,15 @@ def test_agent_delete(self):
12171230
self.assertRaises(agent_exc.AgentNotFound, self.plugin.get_agent,
12181231
self.context, agent_id)
12191232

1220-
# OVN controller agent deletion, that triggers the "Chassis" register
1221-
# deletion. The "Chassis" register deletion triggers the host OVN
1222-
# agents deletion, both controller and metadata if present.
1233+
# OVN controller agent deletion, that triggers the "Chassis" and
1234+
# "Chassis_Private" registers deletion. The registers deletion triggers
1235+
# the host OVN agents deletion, both controller and metadata if
1236+
# present.
12231237
controller_id = self.agent_types[ovn_const.OVN_CONTROLLER_AGENT]
12241238
metadata_id = self.agent_types[ovn_const.OVN_METADATA_AGENT]
1239+
self._check_chassis_registers()
12251240
self.plugin.delete_agent(self.context, controller_id)
1241+
self._check_chassis_registers(present=False)
12261242
self.assertRaises(agent_exc.AgentNotFound, self.plugin.get_agent,
12271243
self.context, controller_id)
12281244
self.assertEqual(

0 commit comments

Comments
 (0)