From dcbc4beb9e8e9b2695fa76015a33f651f904f280 Mon Sep 17 00:00:00 2001 From: labedz Date: Mon, 25 Apr 2022 09:35:47 +0000 Subject: [PATCH] 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 Closes-Bug: 1970216 Change-Id: Ib62c049cc521a548ab7e7e9584b19bdaa67b1c9d --- neutron/cmd/eventlet/server/__init__.py | 5 +++++ neutron/server/__init__.py | 9 +-------- neutron/server/api_eventlet.py | 25 +++++++++++++++++++++++++ setup.cfg | 2 +- 4 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 neutron/server/api_eventlet.py diff --git a/neutron/cmd/eventlet/server/__init__.py b/neutron/cmd/eventlet/server/__init__.py index 32425fa6c85..8508249af56 100644 --- a/neutron/cmd/eventlet/server/__init__.py +++ b/neutron/cmd/eventlet/server/__init__.py @@ -11,6 +11,7 @@ # under the License. from neutron import server +from neutron.server import api_eventlet from neutron.server import rpc_eventlet from neutron.server import wsgi_eventlet @@ -21,3 +22,7 @@ def main(): def main_rpc_eventlet(): server.boot_server(rpc_eventlet.eventlet_rpc_server) + + +def main_api_eventlet(): + return server.boot_server(api_eventlet.eventlet_api_server) diff --git a/neutron/server/__init__.py b/neutron/server/__init__.py index db729626ec1..ed46b8f675d 100644 --- a/neutron/server/__init__.py +++ b/neutron/server/__init__.py @@ -23,7 +23,6 @@ from oslo_config import cfg from neutron._i18n import _ from neutron.common import config -from neutron.common import profiler # NOTE(annp): These environment variables are required for deploying # 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): _init_configuration() try: - server_func() + return server_func() except KeyboardInterrupt: pass except RuntimeError as e: sys.exit(_("ERROR: %s") % e) - - -def get_application(): - _init_configuration() - profiler.setup('neutron-server', cfg.CONF.host) - return config.load_paste_app('neutron') diff --git a/neutron/server/api_eventlet.py b/neutron/server/api_eventlet.py new file mode 100644 index 00000000000..624c16747e3 --- /dev/null +++ b/neutron/server/api_eventlet.py @@ -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') diff --git a/setup.cfg b/setup.cfg index 71326dc305f..8036d34e614 100644 --- a/setup.cfg +++ b/setup.cfg @@ -34,7 +34,7 @@ scripts = [entry_points] wsgi_scripts = - neutron-api = neutron.server:get_application + neutron-api = neutron.cmd.eventlet.server:main_api_eventlet console_scripts = neutron-db-manage = neutron.db.migration.cli:main neutron-debug = neutron.debug.shell:main