]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add eventlet monkey_patch helper
authorAdelina Tuvenie <atuvenie@cloudbasesolutions.com>
Tue, 24 Mar 2015 10:06:21 +0000 (03:06 -0700)
committerAdelina Tuvenie <atuvenie@cloudbasesolutions.com>
Tue, 24 Mar 2015 15:44:00 +0000 (08:44 -0700)
Eventlet monkey patching the os and thread modules causes subprocess.Popen
to fail on Windows when using pipes due to missing non-blocking IO support.
There is an reported bug on eventlet [1] with this issue. The solution
for this issue is to not monkey_patch os and thread.

This change is needed in order to run ovs_neutron_agent on Windows platforms.

[1] https://bitbucket.org/eventlet/eventlet/issue/132/eventletmonkey_patch-breaks

Partially implements blueprint: hyper-v-ovs-agent

Change-Id: I73f5dfc16563da2c09b5440a687484ba5a1fc2de

neutron/cmd/eventlet/__init__.py
neutron/cmd/eventlet/plugins/ovs_neutron_agent.py [new file with mode: 0644]
neutron/common/eventlet_utils.py [new file with mode: 0644]
neutron/plugins/openvswitch/agent/ovs_neutron_agent.py
neutron/tests/__init__.py
setup.cfg

index e8620504805a135022d75bf09fdce3e1d02f7013..01f9f69336313f5e59bd8a49f9e108cdaa322958 100644 (file)
@@ -10,5 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import eventlet
-eventlet.monkey_patch()
+from neutron.common import eventlet_utils
+
+eventlet_utils.monkey_patch()
diff --git a/neutron/cmd/eventlet/plugins/ovs_neutron_agent.py b/neutron/cmd/eventlet/plugins/ovs_neutron_agent.py
new file mode 100644 (file)
index 0000000..ef686f8
--- /dev/null
@@ -0,0 +1,20 @@
+# Copyright (c) 2015 Cloudbase Solutions.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from neutron.plugins.openvswitch.agent import ovs_neutron_agent
+
+
+def main():
+    ovs_neutron_agent.main()
diff --git a/neutron/common/eventlet_utils.py b/neutron/common/eventlet_utils.py
new file mode 100644 (file)
index 0000000..cf995d5
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright (c) 2015 Cloudbase Solutions.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import os
+
+import eventlet
+
+
+def monkey_patch():
+    if os.name == 'nt':
+        # eventlet monkey patching the os and thread modules causes
+        # subprocess.Popen to fail on Windows when using pipes due
+        # to missing non-blocking IO support.
+        #
+        # bug report on eventlet:
+        # https://bitbucket.org/eventlet/eventlet/issue/132/
+        #       eventletmonkey_patch-breaks
+        eventlet.monkey_patch(os=False, thread=False)
+    else:
+        eventlet.monkey_patch()
index 1a820de34d8aaf609d052c3c18a8a95213195d9f..5bacef11404ee9ad7a5e759085161082fe232bc8 100644 (file)
@@ -19,9 +19,6 @@ import signal
 import sys
 import time
 
-import eventlet
-eventlet.monkey_patch()
-
 import netaddr
 from oslo_config import cfg
 from oslo_log import log as logging
index bacc1911e8ee23d30086f381a846dc1f640a74c6..1850daaffa39de1853d29bfe346a4069b3f7d963 100644 (file)
@@ -10,5 +10,6 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-import eventlet
-eventlet.monkey_patch()
+from neutron.common import eventlet_utils
+
+eventlet_utils.monkey_patch()
index 2c15a35309b82e8eb47c2a8523f8e6f54093d526..a9e1714931b910c6b5812c66e038e424deed092f 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -104,7 +104,7 @@ console_scripts =
     neutron-netns-cleanup = neutron.cmd.netns_cleanup:main
     neutron-ns-metadata-proxy = neutron.cmd.eventlet.agents.metadata_proxy:main
     neutron-nvsd-agent = neutron.plugins.oneconvergence.agent.nvsd_neutron_agent:main
-    neutron-openvswitch-agent = neutron.plugins.openvswitch.agent.ovs_neutron_agent:main
+    neutron-openvswitch-agent = neutron.cmd.eventlet.plugins.ovs_neutron_agent:main
     neutron-ovs-cleanup = neutron.cmd.ovs_cleanup:main
     neutron-restproxy-agent = neutron.plugins.bigswitch.agent.restproxy_agent:main
     neutron-server = neutron.cmd.eventlet.server:main