16bfc82962
One of the goals for Pike [1] is to make each API service be able to run under web servers that support WSGI applications, such as Apache (+mod-wsgi) and Nginx (+uWSGI). Do following to address governance requirements: - Split existing manila/wsgi.py module into 3 modules: First (manila/wsgi/eventlet_server.py) is used by eventlet-based WSGI application approach. Second (manila/wsgi/wsgi.py) is used for WSGI web servers. And third (manila/wsgi/common.py) is common code for both. All three are made in cinder-like way to have alike-approach. - Reuse common code from "oslo_service/wsgi.py" module that allows us to remove code duplication. - Delete config opts that are defined by newly reused common code. - Register new entry point that will be manila wsgi app: "manila-wsgi". - Fix "manila/api/openstack/wsgi.py" module to be compatible with str/bytes handling approach used by Apache mod-wsgi plugin using different python versions (2/3). - Add web server config template "devstack/apache-manila.template" - Add devstack support where usage of this feature can be enabled or disabled using "MANILA_USE_MOD_WSGI" env var. It is set to "True" by default, because it is requirement for Pike release - to have it running in all CI jobs. Disable it only for one CI job that uses dummy driver and tests various manila core features that are not covered by other CI jobs. [1] https://governance.openstack.org/tc/goals/pike/deploy-api-in-wsgi.html Partially-Implements BluePrint wsgi-web-servers-support DocImpact Change-Id: Ibdef3c6810b65a5d6f3611e2d0079c635ee523ab
60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
# Copyright 2010 United States Government as represented by the
|
|
# Administrator of the National Aeronautics and Space Administration.
|
|
# Copyright 2010 OpenStack LLC.
|
|
# 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.
|
|
|
|
"""Utility methods for working with WSGI servers."""
|
|
|
|
import socket
|
|
|
|
from oslo_config import cfg
|
|
from oslo_service import wsgi
|
|
from oslo_utils import netutils
|
|
|
|
socket_opts = [
|
|
cfg.BoolOpt('tcp_keepalive',
|
|
default=True,
|
|
help="Sets the value of TCP_KEEPALIVE (True/False) for each "
|
|
"server socket."),
|
|
cfg.IntOpt('tcp_keepalive_interval',
|
|
help="Sets the value of TCP_KEEPINTVL in seconds for each "
|
|
"server socket. Not supported on OS X."),
|
|
cfg.IntOpt('tcp_keepalive_count',
|
|
help="Sets the value of TCP_KEEPCNT for each "
|
|
"server socket. Not supported on OS X."),
|
|
]
|
|
|
|
CONF = cfg.CONF
|
|
CONF.register_opts(socket_opts)
|
|
|
|
|
|
class Server(wsgi.Server):
|
|
"""Server class to manage a WSGI server, serving a WSGI application."""
|
|
|
|
def _set_socket_opts(self, _socket):
|
|
_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
|
# NOTE(praneshp): Call set_tcp_keepalive in oslo to set
|
|
# tcp keepalive parameters. Sockets can hang around forever
|
|
# without keepalive
|
|
netutils.set_tcp_keepalive(
|
|
_socket,
|
|
self.conf.tcp_keepalive,
|
|
self.conf.tcp_keepidle,
|
|
self.conf.tcp_keepalive_count,
|
|
self.conf.tcp_keepalive_interval,
|
|
)
|
|
return _socket
|