Skip to content

Commit b5a77ac

Browse files
rainsun-minsuralonsoh
authored andcommitted
Update OVN_AGENT_NEUTRON_SB_CFG_KEY when Neutron OVN Agent starts
If report time (agent_down_time) is too long, the Neutron API will delay the Chassis_Private update for OVN_AGENT_NEUTRON_SB_CFG_KEY. This patch aims to update OVN_AGENT_NEUTRON_SB_CFG_KEY to nb_cfg as soon as the neutron ovn agent starts. Closes-Bug: #2111660 Change-Id: Iaa0648979cc09b126af801f1f74a996c9df614fe (cherry picked from commit 3bf7f8e)
1 parent 9854c4c commit b5a77ac

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

neutron/agent/ovn/agent/ovn_neutron_agent.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,14 @@ def _load_sb_idl(self):
151151
return ovsdb.MonitorAgentOvnSbIdl(tables, events,
152152
chassis=self.chassis).start()
153153

154+
def update_neutron_sb_cfg_key(self):
155+
nb_cfg = self.sb_idl.db_get('Chassis_Private',
156+
self.chassis, 'nb_cfg').execute()
157+
external_ids = {ovn_const.OVN_AGENT_NEUTRON_SB_CFG_KEY: str(nb_cfg)}
158+
self.sb_idl.db_set(
159+
'Chassis_Private', self.chassis,
160+
('external_ids', external_ids)).execute(check_error=True)
161+
154162
def start(self):
155163
self.ext_manager_api.ovs_idl = self._load_ovs_idl()
156164
self.load_config()
@@ -159,6 +167,8 @@ def start(self):
159167
self.ext_manager_api.sb_idl = self._load_sb_idl()
160168
self.ext_manager_api.nb_idl = self._load_nb_idl()
161169
self.ext_manager.start()
170+
171+
self.update_neutron_sb_cfg_key()
162172
LOG.info('OVN Neutron Agent started')
163173
self.wait()
164174

neutron/agent/ovn/extensions/metadata.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ def resync(self):
161161
Reload the configuration and sync the agent again.
162162
"""
163163
self.agent_api.load_config()
164+
self.agent_api.update_neutron_sb_cfg_key()
164165
self.sync()
165166

166167
def start(self):
@@ -177,6 +178,7 @@ def start(self):
177178

178179
# Register the agent with its corresponding Chassis
179180
self.register_metadata_agent()
181+
self.agent_api.update_neutron_sb_cfg_key()
180182

181183
# Start the metadata server.
182184
proxy_thread = threading.Thread(target=self._proxy.wait)

neutron/tests/functional/agent/ovn/agent/test_ovn_neutron_agent.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,13 @@ def _start_ovn_neutron_agent(self):
7777
mock.patch.object(server_socket.UnixDomainMetadataProxy,
7878
'wait'):
7979
agt.start()
80+
external_ids = agt.sb_idl.db_get(
81+
'Chassis_Private', agt.chassis, 'external_ids').execute(
82+
check_error=True)
83+
self.assertEqual(
84+
external_ids[ovn_const.OVN_AGENT_NEUTRON_SB_CFG_KEY],
85+
'0')
86+
8087
self._check_loaded_and_started_extensions(agt)
8188

8289
self.addCleanup(agt.ext_manager_api.ovs_idl.ovsdb_connection.stop)
@@ -128,9 +135,10 @@ def test_check_metadata_started(self):
128135
# Check the metadata extension is registered.
129136
chassis_id = uuid.UUID(self.chassis_name)
130137
agent_id = uuid.uuid5(chassis_id, 'metadata_agent')
131-
ext_ids = {ovn_const.OVN_AGENT_METADATA_ID_KEY: str(agent_id)}
132138
ch_private = self.sb_api.lookup('Chassis_Private', self.chassis_name)
133-
self.assertEqual(ext_ids, ch_private.external_ids)
139+
self.assertEqual(
140+
ch_private.external_ids[ovn_const.OVN_AGENT_METADATA_ID_KEY],
141+
str(agent_id))
134142

135143
# Check Unix proxy is running.
136144
metadata_extension = self.ovn_agent[METADATA_EXTENSION]

0 commit comments

Comments
 (0)