Skip to content

Commit 524a929

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Delete the "Chassis_Private" register when deleting an agent" into stable/zed
2 parents d0af07a + 5bd7cec commit 524a929

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
@@ -43,6 +43,7 @@
4343
from oslo_db import exception as os_db_exc
4444
from oslo_log import log
4545
from oslo_utils import timeutils
46+
from ovsdbapp.backend.ovs_idl import idlutils
4647

4748
from neutron._i18n import _
4849
from neutron.common.ovn import acl as ovn_acl
@@ -1381,6 +1382,14 @@ def delete_agent(self, context, id, _driver=None):
13811382
chassis_name = agent['configurations']['chassis_name']
13821383
_driver.sb_ovn.chassis_del(chassis_name, if_exists=True).execute(
13831384
check_error=True)
1385+
if _driver.sb_ovn.is_table_present('Chassis_Private'):
1386+
# TODO(ralonsoh): implement the corresponding chassis_private
1387+
# commands in ovsdbapp.
1388+
try:
1389+
_driver.sb_ovn.db_destroy('Chassis_Private', chassis_name).execute(
1390+
check_error=True)
1391+
except idlutils.RowNotFound:
1392+
pass
13841393
# Send a specific event that all API workers can get to delete the agent
13851394
# from their caches. Ideally we could send a single transaction that both
13861395
# 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)