Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Monkey patch threading module as early as possible
In oslo.messaging, local thread store is used to pass RPC request
context [1]. If we try to import oslo.messaging before monkey patching
threading library, it attempts to access unpatched storage and fails
with AttributeError.

[1]: oslo/messaging/localcontext.py#L26

blueprint oslo-messaging

Change-Id: Ied7302fcb1d3e14428540e39e3db704550027890
  • Loading branch information
booxter committed Jun 9, 2014
1 parent f003fe2 commit 6ca8cb8
Show file tree
Hide file tree
Showing 27 changed files with 99 additions and 99 deletions.
3 changes: 2 additions & 1 deletion neutron/agent/dhcp_agent.py
Expand Up @@ -18,6 +18,8 @@
import os

import eventlet
eventlet.monkey_patch()

import netaddr
from oslo.config import cfg

Expand Down Expand Up @@ -607,7 +609,6 @@ def register_options():


def main():
eventlet.monkey_patch()
register_options()
cfg.CONF(project='neutron')
config.setup_logging(cfg.CONF)
Expand Down
3 changes: 2 additions & 1 deletion neutron/agent/l3_agent.py
Expand Up @@ -14,6 +14,8 @@
#

import eventlet
eventlet.monkey_patch()

import netaddr
from oslo.config import cfg

Expand Down Expand Up @@ -967,7 +969,6 @@ def agent_updated(self, context, payload):


def main(manager='neutron.agent.l3_agent.L3NATAgentWithStateReport'):
eventlet.monkey_patch()
conf = cfg.CONF
conf.register_opts(L3NATAgent.OPTS)
config.register_interface_driver_opts_helper(conf)
Expand Down
3 changes: 2 additions & 1 deletion neutron/agent/metadata/agent.py
Expand Up @@ -22,6 +22,8 @@
import socket

import eventlet
eventlet.monkey_patch()

import httplib2
from neutronclient.v2_0 import client
from oslo.config import cfg
Expand Down Expand Up @@ -377,7 +379,6 @@ def run(self):


def main():
eventlet.monkey_patch()
cfg.CONF.register_opts(UnixDomainMetadataProxy.OPTS)
cfg.CONF.register_opts(MetadataProxyHandler.OPTS)
cache.register_oslo_configs(cfg.CONF)
Expand Down
3 changes: 2 additions & 1 deletion neutron/agent/metadata/namespace_proxy.py
Expand Up @@ -20,6 +20,8 @@
import socket

import eventlet
eventlet.monkey_patch()

import httplib2
from oslo.config import cfg
import six.moves.urllib.parse as urlparse
Expand Down Expand Up @@ -144,7 +146,6 @@ def run(self):


def main():
eventlet.monkey_patch()
opts = [
cfg.StrOpt('network_id',
help=_('Network that will have instance metadata '
Expand Down
4 changes: 2 additions & 2 deletions neutron/agent/netns_cleanup_util.py
Expand Up @@ -18,6 +18,8 @@
import re

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.agent.common import config as agent_config
Expand Down Expand Up @@ -157,8 +159,6 @@ def main():
installation as it will blindly purge namespaces and their devices. This
option also kills any lingering DHCP instances.
"""
eventlet.monkey_patch()

conf = setup_conf()
conf()
config.setup_logging(conf)
Expand Down
5 changes: 3 additions & 2 deletions neutron/plugins/bigswitch/agent/restproxy_agent.py
Expand Up @@ -17,10 +17,12 @@
# under the License.
# @author: Kevin Benton, kevin.benton@bigswitch.com

import eventlet
import sys
import time

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.agent.linux import ovs_lib
Expand Down Expand Up @@ -162,7 +164,6 @@ def daemon_loop(self):


def main():
eventlet.monkey_patch()
cfg.CONF(project='neutron')
config.setup_logging(cfg.CONF)
pl_config.register_config()
Expand Down
5 changes: 3 additions & 2 deletions neutron/plugins/hyperv/agent/hyperv_neutron_agent.py
Expand Up @@ -18,11 +18,13 @@
# @author: Pedro Navarro Perez
# @author: Alessandro Pilotti, Cloudbase Solutions Srl

import eventlet
import platform
import re
import time

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.agent.common import config
Expand Down Expand Up @@ -464,7 +466,6 @@ def daemon_loop(self):


def main():
eventlet.monkey_patch()
cfg.CONF(project='neutron')
logging_config.setup_logging(cfg.CONF)

Expand Down
3 changes: 2 additions & 1 deletion neutron/plugins/ibm/agent/sdnve_neutron_agent.py
Expand Up @@ -21,6 +21,8 @@
import time

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.agent.linux import ip_lib
Expand Down Expand Up @@ -252,7 +254,6 @@ def create_agent_config_map(config):


def main():
eventlet.monkey_patch()
cfg.CONF.register_opts(ip_lib.OPTS)
cfg.CONF(project='neutron')
logging_config.setup_logging(cfg.CONF)
Expand Down
Expand Up @@ -27,6 +27,8 @@
import time

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.agent import l2population_rpc as l2pop_rpc
Expand Down Expand Up @@ -1025,7 +1027,6 @@ def daemon_loop(self):


def main():
eventlet.monkey_patch()
cfg.CONF(project='neutron')

logging_config.setup_logging(cfg.CONF)
Expand Down
3 changes: 2 additions & 1 deletion neutron/plugins/mlnx/agent/eswitch_neutron_agent.py
Expand Up @@ -21,6 +21,8 @@
import time

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.agent import rpc as agent_rpc
Expand Down Expand Up @@ -417,7 +419,6 @@ def daemon_loop(self):


def main():
eventlet.monkey_patch()
cfg.CONF(project='neutron')
logging_config.setup_logging(cfg.CONF)

Expand Down
3 changes: 1 addition & 2 deletions neutron/plugins/nec/agent/nec_neutron_agent.py
Expand Up @@ -24,6 +24,7 @@
import time

import eventlet
eventlet.monkey_patch()

from neutron.agent.linux import ovs_lib
from neutron.agent import rpc as agent_rpc
Expand Down Expand Up @@ -230,8 +231,6 @@ def daemon_loop(self):


def main():
eventlet.monkey_patch()

config.CONF(project='neutron')

logging_config.setup_logging(config.CONF)
Expand Down
2 changes: 1 addition & 1 deletion neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py
Expand Up @@ -20,6 +20,7 @@
import time

import eventlet
eventlet.monkey_patch()

from neutron.agent.linux import ovs_lib
from neutron.agent import rpc as agent_rpc
Expand Down Expand Up @@ -160,7 +161,6 @@ def daemon_loop(self):


def main():
eventlet.monkey_patch()
config.CONF(project='neutron')
logging_config.setup_logging(config.CONF)

Expand Down
3 changes: 2 additions & 1 deletion neutron/plugins/openvswitch/agent/ovs_neutron_agent.py
Expand Up @@ -19,6 +19,8 @@
import time

import eventlet
eventlet.monkey_patch()

import netaddr
from oslo.config import cfg
from six import moves
Expand Down Expand Up @@ -1461,7 +1463,6 @@ def create_agent_config_map(config):


def main():
eventlet.monkey_patch()
cfg.CONF.register_opts(ip_lib.OPTS)
cfg.CONF(project='neutron')
logging_config.setup_logging(cfg.CONF)
Expand Down
3 changes: 2 additions & 1 deletion neutron/plugins/ryu/agent/ryu_neutron_agent.py
Expand Up @@ -24,6 +24,8 @@
import time

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg
from ryu.app import client
from ryu.app import conf_switch_key
Expand Down Expand Up @@ -282,7 +284,6 @@ def daemon_loop(self):


def main():
eventlet.monkey_patch()
cfg.CONF(project='neutron')

logging_config.setup_logging(cfg.CONF)
Expand Down
5 changes: 3 additions & 2 deletions neutron/plugins/vmware/api_client/eventlet_client.py
Expand Up @@ -15,14 +15,15 @@
# under the License.
#

import eventlet
import time

import eventlet
eventlet.monkey_patch()

from neutron.openstack.common import log as logging
from neutron.plugins.vmware.api_client import base
from neutron.plugins.vmware.api_client import eventlet_request

eventlet.monkey_patch()
LOG = logging.getLogger(__name__)


Expand Down
6 changes: 3 additions & 3 deletions neutron/server/__init__.py
Expand Up @@ -18,9 +18,11 @@
# If ../neutron/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python...

import eventlet
import sys

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.common import config
Expand All @@ -34,8 +36,6 @@


def main():
eventlet.monkey_patch()

# the configuration will be read into the cfg.CONF global data structure
config.parse(sys.argv[1:])
if not cfg.CONF.config_file:
Expand Down
3 changes: 2 additions & 1 deletion neutron/services/firewall/agents/varmour/varmour_router.py
Expand Up @@ -19,6 +19,8 @@
#

import eventlet
eventlet.monkey_patch()

import netaddr
from oslo.config import cfg

Expand Down Expand Up @@ -327,7 +329,6 @@ class vArmourL3NATAgentWithStateReport(vArmourL3NATAgent,


def main():
eventlet.monkey_patch()
conf = cfg.CONF
conf.register_opts(vArmourL3NATAgent.OPTS)
config.register_interface_driver_opts_helper(conf)
Expand Down
3 changes: 2 additions & 1 deletion neutron/services/loadbalancer/agent/agent.py
Expand Up @@ -17,6 +17,8 @@
# @author: Mark McClain, DreamHost

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.agent.common import config
Expand Down Expand Up @@ -47,7 +49,6 @@ def start(self):


def main():
eventlet.monkey_patch()
cfg.CONF.register_opts(OPTS)
cfg.CONF.register_opts(manager.OPTS)
# import interface options just in case the driver uses namespaces
Expand Down
4 changes: 2 additions & 2 deletions neutron/services/loadbalancer/drivers/radware/driver.py
Expand Up @@ -25,6 +25,8 @@


import eventlet
eventlet.monkey_patch(thread=True)

from oslo.config import cfg

from neutron.api.v2 import attributes
Expand All @@ -39,8 +41,6 @@
from neutron.services.loadbalancer.drivers import abstract_driver
from neutron.services.loadbalancer.drivers.radware import exceptions as r_exc

eventlet.monkey_patch(thread=True)

LOG = logging.getLogger(__name__)

RESP_STATUS = 0
Expand Down
3 changes: 2 additions & 1 deletion neutron/services/metering/agents/metering_agent.py
Expand Up @@ -17,6 +17,8 @@
import time

import eventlet
eventlet.monkey_patch()

from oslo.config import cfg

from neutron.agent.common import config
Expand Down Expand Up @@ -281,7 +283,6 @@ def agent_updated(self, context, payload):


def main():
eventlet.monkey_patch()
conf = cfg.CONF
conf.register_opts(MeteringAgent.Opts)
config.register_agent_state_opts_helper(conf)
Expand Down
16 changes: 7 additions & 9 deletions neutron/tests/unit/hyperv/test_hyperv_neutron_agent.py
Expand Up @@ -213,14 +213,12 @@ def test_main(self):
with mock.patch.object(hyperv_neutron_agent,
'HyperVNeutronAgent') as plugin:
with mock.patch.object(hyperv_neutron_agent.cfg, 'CONF') as cfg:
with mock.patch('eventlet.monkey_patch') as eventlet:
with mock.patch.object(
hyperv_neutron_agent,
'logging_config') as logging_config:
with mock.patch.object(
hyperv_neutron_agent,
'logging_config') as logging_config:

hyperv_neutron_agent.main()
hyperv_neutron_agent.main()

self.assertTrue(cfg.called)
self.assertTrue(eventlet.called)
self.assertTrue(logging_config.setup_logging.called)
plugin.assert_has_calls([mock.call().daemon_loop()])
self.assertTrue(cfg.called)
self.assertTrue(logging_config.setup_logging.called)
plugin.assert_has_calls([mock.call().daemon_loop()])
4 changes: 1 addition & 3 deletions neutron/tests/unit/nec/test_nec_agent.py
Expand Up @@ -350,17 +350,15 @@ class TestNecAgentMain(base.BaseTestCase):
def test_main(self):
with contextlib.nested(
mock.patch.object(nec_neutron_agent, 'NECNeutronAgent'),
mock.patch('eventlet.monkey_patch'),
mock.patch.object(nec_neutron_agent, 'logging_config'),
mock.patch.object(nec_neutron_agent, 'config')
) as (agent, eventlet, logging_config, cfg):
) as (agent, logging_config, cfg):
cfg.OVS.integration_bridge = 'br-int-x'
cfg.AGENT.root_helper = 'dummy-helper'
cfg.AGENT.polling_interval = 10

nec_neutron_agent.main()

self.assertTrue(eventlet.called)
self.assertTrue(logging_config.setup_logging.called)
agent.assert_has_calls([
mock.call('br-int-x', 'dummy-helper', 10),
Expand Down

0 comments on commit 6ca8cb8

Please sign in to comment.