From 20e8c6f55380bc94709bc3f25d5c8eebd1f56bee Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Mon, 20 Jul 2020 14:12:06 +0000 Subject: [PATCH] Import "oslo_config.cfg" before "eventlet" Eventlet will patch the "os" library and how it works. If "oslo_config.cfg" is called after "eventlet": - "oslo_config.cfg" imports "stevedore" - "stevedore" imports "importlib_metadata" - this library will try to use "os.open" library, but patched - "eventlet" imports "oslo_service" - "oslo_service" imports "oslo_logging" - "oslo_logging" imports "oslo_config.cfg", but at this point, the instance cfg.CONF does not exist yet If "oslo_config.cfg" is imported before calling eventlet, "oslo_logging" is not called and there is no circular import. Closes-Bug: #1888213 [1]I8b08f289d446f4775eac1e1a91997fa96f25f641 Change-Id: Idcc04f46b2a01e24dfd56cef8121694439e0339e (cherry picked from commit bc99e56515537210a35988d3fbdec0669469d0b3) --- neutron/tests/fullstack/agents/l3_agent.py | 2 ++ neutron/tests/functional/agent/linux/bin/ipt_binname.py | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/neutron/tests/fullstack/agents/l3_agent.py b/neutron/tests/fullstack/agents/l3_agent.py index fae5be2d507..ebc50399f7a 100755 --- a/neutron/tests/fullstack/agents/l3_agent.py +++ b/neutron/tests/fullstack/agents/l3_agent.py @@ -15,6 +15,8 @@ import sys +from oslo_config import cfg # noqa + from neutron.common import eventlet_utils from neutron.tests.common.agents import l3_agent diff --git a/neutron/tests/functional/agent/linux/bin/ipt_binname.py b/neutron/tests/functional/agent/linux/bin/ipt_binname.py index e0d7a4cc93c..43842d8af05 100755 --- a/neutron/tests/functional/agent/linux/bin/ipt_binname.py +++ b/neutron/tests/functional/agent/linux/bin/ipt_binname.py @@ -20,7 +20,7 @@ from __future__ import print_function import sys -import eventlet +from oslo_config import cfg # noqa def print_binary_name(): @@ -33,6 +33,9 @@ def print_binary_name(): if __name__ == "__main__": + + import eventlet + if 'spawn' in sys.argv: eventlet.spawn(print_binary_name).wait() else: