Skip to content

Commit 7a42dd7

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "[OVN] Allow to execute MetadataProxyHandler in a local thread" into stable/yoga
2 parents 0889dda + c8409a3 commit 7a42dd7

File tree

4 files changed

+26
-18
lines changed

4 files changed

+26
-18
lines changed

neutron/agent/ovn/metadata/agent.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,11 +242,6 @@ def start(self):
242242
self.ovs_idl = ovsdb.MetadataAgentOvsIdl().start()
243243
self._load_config()
244244

245-
# Launch the server that will act as a proxy between the VM's and Nova.
246-
proxy = metadata_server.UnixDomainMetadataProxy(self.conf,
247-
self.chassis)
248-
proxy.run()
249-
250245
tables = ('Encap', 'Port_Binding', 'Datapath_Binding', 'SB_Global',
251246
'Chassis')
252247
events = (PortBindingChassisCreatedEvent(self),
@@ -272,13 +267,18 @@ def start(self):
272267
# Now IDL connections can be safely used.
273268
self._post_fork_event.set()
274269

270+
# Launch the server that will act as a proxy between the VM's and Nova.
271+
self._proxy = metadata_server.UnixDomainMetadataProxy(
272+
self.conf, self.chassis, sb_idl=self.sb_idl)
273+
self._proxy.run()
274+
275275
# Do the initial sync.
276276
self.sync()
277277

278278
# Register the agent with its corresponding Chassis
279279
self.register_metadata_agent()
280280

281-
proxy.wait()
281+
self._proxy.wait()
282282

283283
@tenacity.retry(
284284
wait=tenacity.wait_exponential(

neutron/agent/ovn/metadata/server.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@
4444

4545
class MetadataProxyHandler(object):
4646

47-
def __init__(self, conf, chassis):
47+
def __init__(self, conf, chassis, sb_idl):
4848
self.conf = conf
4949
self.chassis = chassis
50-
self._sb_idl = None
50+
self._sb_idl = sb_idl
5151
self._post_fork_event = threading.Event()
5252
self.subscribe()
5353

@@ -193,9 +193,10 @@ def _sign_instance_id(self, instance_id):
193193

194194
class UnixDomainMetadataProxy(object):
195195

196-
def __init__(self, conf, chassis):
196+
def __init__(self, conf, chassis, sb_idl=None):
197197
self.conf = conf
198198
self.chassis = chassis
199+
self.sb_idl = sb_idl
199200
agent_utils.ensure_directory_exists_without_file(
200201
cfg.CONF.metadata_proxy_socket)
201202

@@ -224,7 +225,9 @@ def run(self):
224225
md_workers = self.conf.metadata_workers
225226
if md_workers is None:
226227
md_workers = 2
227-
self.server.start(MetadataProxyHandler(self.conf, self.chassis),
228+
sb_idl = self.sb_idl if md_workers == 0 else None
229+
self.server.start(MetadataProxyHandler(self.conf, self.chassis,
230+
sb_idl),
228231
self.conf.metadata_proxy_socket,
229232
workers=md_workers,
230233
backlog=self.conf.metadata_backlog,

neutron/tests/functional/agent/ovn/metadata/test_metadata_agent.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,17 @@ def _start_metadata_agent(self):
8787

8888
ovn_sb_db = self.ovsdb_server_mgr.get_ovsdb_connection_path('sb')
8989
conf.set_override('ovn_sb_connection', ovn_sb_db, group='ovn')
90-
91-
# We don't need the HA proxy server running for now
92-
p = mock.patch.object(metadata_server, 'UnixDomainMetadataProxy')
93-
p.start()
94-
self.addCleanup(p.stop)
90+
conf.set_override('metadata_workers', '0')
9591

9692
self.chassis_name = self.add_fake_chassis(self.FAKE_CHASSIS_HOST)
9793
mock.patch.object(agent.MetadataAgent,
9894
'_get_own_chassis_name',
9995
return_value=self.chassis_name).start()
10096
agt = agent.MetadataAgent(conf)
101-
agt.start()
97+
with mock.patch.object(metadata_server.UnixDomainMetadataProxy,
98+
'wait'):
99+
agt.start()
100+
102101
# Metadata agent will open connections to OVS and SB databases.
103102
# Close connections to them when the test ends,
104103
self.addCleanup(agt.ovs_idl.ovsdb_connection.stop)
@@ -338,3 +337,9 @@ def test__ensure_datapath_checksum_if_dpdk(self):
338337
else:
339338
self.fail('Rule not found in "mangle" table, in namespace %s' %
340339
namespace)
340+
341+
def test_metadata_proxy_handler_idl(self):
342+
# This test relies on the configuration option metadata_workers=0
343+
proxy_sb_idl = self.agent._proxy.server._server._application.sb_idl
344+
agent_sb_idl = self.agent.sb_idl
345+
self.assertEqual(agent_sb_idl, proxy_sb_idl)

neutron/tests/unit/agent/ovn/metadata/test_server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ def setUp(self):
5555
self.useFixture(self.fake_conf_fixture)
5656
self.log_p = mock.patch.object(agent, 'LOG')
5757
self.log = self.log_p.start()
58-
self.handler = agent.MetadataProxyHandler(self.fake_conf, 'chassis1')
59-
self.handler.sb_idl = mock.Mock()
58+
self.handler = agent.MetadataProxyHandler(self.fake_conf, 'chassis1',
59+
mock.Mock())
6060
self.handler._post_fork_event.set()
6161

6262
def test_call(self):

0 commit comments

Comments
 (0)