Use monkey_patch for neutron API server.

Neutron API server was not using eventlet monkey patch
thus eventlet threads couldn't be properly yielded.

This patch set API neutron server like other monkey patched
neutron services: neutron-server and neutron-rpc-server.

NOTE: this change needs apache service restart. Apache
mod_wsgi auto reload can lead to SSL RecursionError.

Co-Authored-By: Szymon Wroblewski <szymon.wroblewski@ovhcloud.com>
Closes-Bug: 1970216
Change-Id: Ib62c049cc521a548ab7e7e9584b19bdaa67b1c9d
This commit is contained in:
labedz 2022-04-25 09:35:47 +00:00 committed by Krzysztof Tomaszewski
parent 720a1c3de9
commit dcbc4beb9e
4 changed files with 32 additions and 9 deletions

View File

@ -11,6 +11,7 @@
# under the License. # under the License.
from neutron import server from neutron import server
from neutron.server import api_eventlet
from neutron.server import rpc_eventlet from neutron.server import rpc_eventlet
from neutron.server import wsgi_eventlet from neutron.server import wsgi_eventlet
@ -21,3 +22,7 @@ def main():
def main_rpc_eventlet(): def main_rpc_eventlet():
server.boot_server(rpc_eventlet.eventlet_rpc_server) server.boot_server(rpc_eventlet.eventlet_rpc_server)
def main_api_eventlet():
return server.boot_server(api_eventlet.eventlet_api_server)

View File

@ -23,7 +23,6 @@ from oslo_config import cfg
from neutron._i18n import _ from neutron._i18n import _
from neutron.common import config from neutron.common import config
from neutron.common import profiler
# NOTE(annp): These environment variables are required for deploying # NOTE(annp): These environment variables are required for deploying
# neutron-api under mod_wsgi. Currently, these variables are set as DevStack's # neutron-api under mod_wsgi. Currently, these variables are set as DevStack's
@ -65,14 +64,8 @@ def _init_configuration():
def boot_server(server_func): def boot_server(server_func):
_init_configuration() _init_configuration()
try: try:
server_func() return server_func()
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
except RuntimeError as e: except RuntimeError as e:
sys.exit(_("ERROR: %s") % e) sys.exit(_("ERROR: %s") % e)
def get_application():
_init_configuration()
profiler.setup('neutron-server', cfg.CONF.host)
return config.load_paste_app('neutron')

View File

@ -0,0 +1,25 @@
#!/usr/bin/env python
# Copyright (c) 2022, OVH SAS
# 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 oslo_config import cfg
from neutron.common import config
from neutron.common import profiler
def eventlet_api_server():
profiler.setup('neutron-server', cfg.CONF.host)
return config.load_paste_app('neutron')

View File

@ -34,7 +34,7 @@ scripts =
[entry_points] [entry_points]
wsgi_scripts = wsgi_scripts =
neutron-api = neutron.server:get_application neutron-api = neutron.cmd.eventlet.server:main_api_eventlet
console_scripts = console_scripts =
neutron-db-manage = neutron.db.migration.cli:main neutron-db-manage = neutron.db.migration.cli:main
neutron-debug = neutron.debug.shell:main neutron-debug = neutron.debug.shell:main