From 556b1d0871d01ab17715955bef566c99bcf6bedc Mon Sep 17 00:00:00 2001 From: Yuriy Zveryanskyy Date: Thu, 2 Mar 2017 12:01:36 +0200 Subject: [PATCH] Move eventlet monkey patch code Eventlet monkey patching is not recommended on top level __init__ [1], because Apache WSGI module uses own concurrency model [2] and API service under Apache should be runned without eventlet. This patch moves eventlet monkey patching code to ironic.cmd module __init__ (like in nova). [1] https://specs.openstack.org/openstack/openstack-specs/specs/eventlet-best-practices.html [2] http://modwsgi.readthedocs.io/en/develop/user-guides/processes-and-threading.html Closes-Bug: 1608252 Change-Id: I887a06566dcc2f09875f975f1e12ae4ff75fd348 --- ironic/__init__.py | 22 ------------------- ironic/cmd/__init__.py | 10 +++++++++ ...che-multiple-workers-11d4ba52c89a13e3.yaml | 3 +++ 3 files changed, 13 insertions(+), 22 deletions(-) create mode 100644 releasenotes/notes/apache-multiple-workers-11d4ba52c89a13e3.yaml diff --git a/ironic/__init__.py b/ironic/__init__.py index e4c759d36e..e69de29bb2 100644 --- a/ironic/__init__.py +++ b/ironic/__init__.py @@ -1,22 +0,0 @@ -# Copyright (c) 2014 Hewlett-Packard Development Company, L.P. -# 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 - -os.environ['EVENTLET_NO_GREENDNS'] = 'yes' - -import eventlet - -eventlet.monkey_patch(os=False) diff --git a/ironic/cmd/__init__.py b/ironic/cmd/__init__.py index b4a691d3ce..0c59a8121e 100644 --- a/ironic/cmd/__init__.py +++ b/ironic/cmd/__init__.py @@ -13,6 +13,16 @@ # License for the specific language governing permissions and limitations # under the License. +# NOTE(yuriyz): Do eventlet monkey patching here, not in ironic/__init__.py +# This allows API service runs under Apache. +import os + +os.environ['EVENTLET_NO_GREENDNS'] = 'yes' + +import eventlet + +eventlet.monkey_patch(os=False) + import oslo_i18n as i18n i18n.install('ironic') diff --git a/releasenotes/notes/apache-multiple-workers-11d4ba52c89a13e3.yaml b/releasenotes/notes/apache-multiple-workers-11d4ba52c89a13e3.yaml new file mode 100644 index 0000000000..b67fb9a48c --- /dev/null +++ b/releasenotes/notes/apache-multiple-workers-11d4ba52c89a13e3.yaml @@ -0,0 +1,3 @@ +--- +fixes: + - Fix issue with multiple threads when ironic API service runs under Apache.