Move wsgi to oslo_service.wsgi
This patch replaces wsgi with oslo_service.wsgi in service.py DocImpact Implements: blueprint reusing-wsgi-from-oslo.service Change-Id: Ib4c4bf9d78571d63c667753ea10dfea28ea6b866
This commit is contained in:
@@ -29,6 +29,7 @@ from oslo_log import log as logging
|
|||||||
import oslo_messaging as messaging
|
import oslo_messaging as messaging
|
||||||
from oslo_service import loopingcall
|
from oslo_service import loopingcall
|
||||||
from oslo_service import service
|
from oslo_service import service
|
||||||
|
from oslo_service import wsgi
|
||||||
from oslo_utils import importutils
|
from oslo_utils import importutils
|
||||||
import osprofiler.notifier
|
import osprofiler.notifier
|
||||||
from osprofiler import profiler
|
from osprofiler import profiler
|
||||||
@@ -41,8 +42,7 @@ from cinder import objects
|
|||||||
from cinder.objects import base as objects_base
|
from cinder.objects import base as objects_base
|
||||||
from cinder import rpc
|
from cinder import rpc
|
||||||
from cinder import version
|
from cinder import version
|
||||||
from cinder.wsgi import common as wsgi_common
|
|
||||||
from cinder.wsgi import eventlet_server as wsgi
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -358,7 +358,7 @@ class WSGIService(service.ServiceBase):
|
|||||||
"""
|
"""
|
||||||
self.name = name
|
self.name = name
|
||||||
self.manager = self._get_manager()
|
self.manager = self._get_manager()
|
||||||
self.loader = loader or wsgi_common.Loader()
|
self.loader = loader or wsgi.Loader(CONF)
|
||||||
self.app = self.loader.load_app(name)
|
self.app = self.loader.load_app(name)
|
||||||
self.host = getattr(CONF, '%s_listen' % name, "0.0.0.0")
|
self.host = getattr(CONF, '%s_listen' % name, "0.0.0.0")
|
||||||
self.port = getattr(CONF, '%s_listen_port' % name, 0)
|
self.port = getattr(CONF, '%s_listen_port' % name, 0)
|
||||||
|
|||||||
@@ -16,13 +16,14 @@
|
|||||||
"""
|
"""
|
||||||
Provides common functionality for integrated unit tests
|
Provides common functionality for integrated unit tests
|
||||||
"""
|
"""
|
||||||
|
import os.path
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
import mock
|
import mock
|
||||||
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
||||||
from cinder import service
|
from cinder import service
|
||||||
@@ -30,6 +31,7 @@ from cinder import test # For the flags
|
|||||||
from cinder.tests.unit.integrated.api import client
|
from cinder.tests.unit.integrated.api import client
|
||||||
|
|
||||||
|
|
||||||
|
CONF = cfg.CONF
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -80,6 +82,10 @@ class _IntegratedTestBase(test.TestCase):
|
|||||||
self.api = client.TestOpenStackClient('fake', 'fake', self.auth_url)
|
self.api = client.TestOpenStackClient('fake', 'fake', self.auth_url)
|
||||||
|
|
||||||
def _start_api_service(self):
|
def _start_api_service(self):
|
||||||
|
default_conf = os.path.abspath(os.path.join(
|
||||||
|
os.path.dirname(__file__), '..', '..', '..', '..',
|
||||||
|
'etc/cinder/api-paste.ini'))
|
||||||
|
CONF.api_paste_config = default_conf
|
||||||
self.osapi = service.WSGIService("osapi_volume")
|
self.osapi = service.WSGIService("osapi_volume")
|
||||||
self.osapi.start()
|
self.osapi.start()
|
||||||
# FIXME(ja): this is not the auth url - this is the service url
|
# FIXME(ja): this is not the auth url - this is the service url
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import time
|
|||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
from cinder import service
|
|
||||||
from cinder.tests.unit import fake_driver
|
from cinder.tests.unit import fake_driver
|
||||||
from cinder.tests.unit.integrated.api import client
|
from cinder.tests.unit.integrated.api import client
|
||||||
from cinder.tests.unit.integrated import integrated_helpers
|
from cinder.tests.unit.integrated import integrated_helpers
|
||||||
@@ -32,12 +31,6 @@ class VolumesTest(integrated_helpers._IntegratedTestBase):
|
|||||||
super(VolumesTest, self).setUp()
|
super(VolumesTest, self).setUp()
|
||||||
fake_driver.LoggingVolumeDriver.clear_logs()
|
fake_driver.LoggingVolumeDriver.clear_logs()
|
||||||
|
|
||||||
def _start_api_service(self):
|
|
||||||
self.osapi = service.WSGIService("osapi_volume")
|
|
||||||
self.osapi.start()
|
|
||||||
self.auth_url = 'http://%s:%s/v2' % (self.osapi.host, self.osapi.port)
|
|
||||||
LOG.warning(self.auth_url)
|
|
||||||
|
|
||||||
def _get_flags(self):
|
def _get_flags(self):
|
||||||
f = super(VolumesTest, self)._get_flags()
|
f = super(VolumesTest, self)._get_flags()
|
||||||
f['volume_driver'] = \
|
f['volume_driver'] = \
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ from cinder import objects
|
|||||||
from cinder import rpc
|
from cinder import rpc
|
||||||
from cinder import service
|
from cinder import service
|
||||||
from cinder import test
|
from cinder import test
|
||||||
from cinder.wsgi import common as wsgi
|
|
||||||
|
|
||||||
|
|
||||||
test_service_opts = [
|
test_service_opts = [
|
||||||
@@ -252,17 +251,17 @@ class TestWSGIService(test.TestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestWSGIService, self).setUp()
|
super(TestWSGIService, self).setUp()
|
||||||
|
|
||||||
def test_service_random_port(self):
|
@mock.patch('oslo_service.wsgi.Loader')
|
||||||
with mock.patch.object(wsgi.Loader, 'load_app') as mock_load_app:
|
def test_service_random_port(self, mock_loader):
|
||||||
test_service = service.WSGIService("test_service")
|
test_service = service.WSGIService("test_service")
|
||||||
self.assertEqual(0, test_service.port)
|
self.assertEqual(0, test_service.port)
|
||||||
test_service.start()
|
test_service.start()
|
||||||
self.assertNotEqual(0, test_service.port)
|
self.assertNotEqual(0, test_service.port)
|
||||||
test_service.stop()
|
test_service.stop()
|
||||||
self.assertTrue(mock_load_app.called)
|
self.assertTrue(mock_loader.called)
|
||||||
|
|
||||||
def test_reset_pool_size_to_default(self):
|
@mock.patch('oslo_service.wsgi.Loader')
|
||||||
with mock.patch.object(wsgi.Loader, 'load_app') as mock_load_app:
|
def test_reset_pool_size_to_default(self, mock_loader):
|
||||||
test_service = service.WSGIService("test_service")
|
test_service = service.WSGIService("test_service")
|
||||||
test_service.start()
|
test_service.start()
|
||||||
|
|
||||||
@@ -274,36 +273,38 @@ class TestWSGIService(test.TestCase):
|
|||||||
test_service.reset()
|
test_service.reset()
|
||||||
test_service.start()
|
test_service.start()
|
||||||
self.assertEqual(1000, test_service.server._pool.size)
|
self.assertEqual(1000, test_service.server._pool.size)
|
||||||
self.assertTrue(mock_load_app.called)
|
self.assertTrue(mock_loader.called)
|
||||||
|
|
||||||
@mock.patch('oslo_service.wsgi.Server')
|
@mock.patch('oslo_service.wsgi.Loader')
|
||||||
def test_workers_set_default(self, wsgi_server):
|
def test_workers_set_default(self, mock_loader):
|
||||||
self.override_config('osapi_volume_listen_port', 0)
|
|
||||||
test_service = service.WSGIService("osapi_volume")
|
test_service = service.WSGIService("osapi_volume")
|
||||||
self.assertEqual(processutils.get_worker_count(), test_service.workers)
|
self.assertEqual(processutils.get_worker_count(),
|
||||||
|
test_service.workers)
|
||||||
|
self.assertTrue(mock_loader.called)
|
||||||
|
|
||||||
@mock.patch('oslo_service.wsgi.Server')
|
@mock.patch('oslo_service.wsgi.Loader')
|
||||||
def test_workers_set_good_user_setting(self, wsgi_server):
|
def test_workers_set_good_user_setting(self, mock_loader):
|
||||||
self.override_config('osapi_volume_listen_port', 0)
|
|
||||||
self.override_config('osapi_volume_workers', 8)
|
self.override_config('osapi_volume_workers', 8)
|
||||||
test_service = service.WSGIService("osapi_volume")
|
test_service = service.WSGIService("osapi_volume")
|
||||||
self.assertEqual(8, test_service.workers)
|
self.assertEqual(8, test_service.workers)
|
||||||
|
self.assertTrue(mock_loader.called)
|
||||||
|
|
||||||
@mock.patch('oslo_service.wsgi.Server')
|
@mock.patch('oslo_service.wsgi.Loader')
|
||||||
def test_workers_set_zero_user_setting(self, wsgi_server):
|
def test_workers_set_zero_user_setting(self, mock_loader):
|
||||||
self.override_config('osapi_volume_listen_port', 0)
|
|
||||||
self.override_config('osapi_volume_workers', 0)
|
self.override_config('osapi_volume_workers', 0)
|
||||||
test_service = service.WSGIService("osapi_volume")
|
test_service = service.WSGIService("osapi_volume")
|
||||||
# If a value less than 1 is used, defaults to number of procs available
|
# If a value less than 1 is used, defaults to number of procs
|
||||||
self.assertEqual(processutils.get_worker_count(), test_service.workers)
|
# available
|
||||||
|
self.assertEqual(processutils.get_worker_count(),
|
||||||
|
test_service.workers)
|
||||||
|
self.assertTrue(mock_loader.called)
|
||||||
|
|
||||||
@mock.patch('oslo_service.wsgi.Server')
|
@mock.patch('oslo_service.wsgi.Loader')
|
||||||
def test_workers_set_negative_user_setting(self, wsgi_server):
|
def test_workers_set_negative_user_setting(self, mock_loader):
|
||||||
self.override_config('osapi_volume_workers', -1)
|
self.override_config('osapi_volume_workers', -1)
|
||||||
self.assertRaises(exception.InvalidInput,
|
self.assertRaises(exception.InvalidInput,
|
||||||
service.WSGIService,
|
service.WSGIService, "osapi_volume")
|
||||||
"osapi_volume")
|
self.assertTrue(mock_loader.called)
|
||||||
self.assertFalse(wsgi_server.called)
|
|
||||||
|
|
||||||
|
|
||||||
class OSCompatibilityTestCase(test.TestCase):
|
class OSCompatibilityTestCase(test.TestCase):
|
||||||
|
|||||||
@@ -16,14 +16,10 @@
|
|||||||
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from oslo_service import wsgi
|
|
||||||
from paste import deploy
|
|
||||||
import webob.dec
|
import webob.dec
|
||||||
import webob.exc
|
import webob.exc
|
||||||
|
|
||||||
from cinder import exception
|
from cinder.i18n import _
|
||||||
from cinder.i18n import _, _LE
|
|
||||||
from cinder import utils
|
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@@ -159,32 +155,3 @@ class Middleware(Application):
|
|||||||
return response
|
return response
|
||||||
response = req.get_response(self.application)
|
response = req.get_response(self.application)
|
||||||
return self.process_response(response)
|
return self.process_response(response)
|
||||||
|
|
||||||
|
|
||||||
class Loader(object):
|
|
||||||
"""Used to load WSGI applications from paste configurations."""
|
|
||||||
|
|
||||||
def __init__(self, config_path=None):
|
|
||||||
"""Initialize the loader, and attempt to find the config.
|
|
||||||
|
|
||||||
:param config_path: Full or relative path to the paste config.
|
|
||||||
:returns: None
|
|
||||||
|
|
||||||
"""
|
|
||||||
wsgi.register_opts(CONF) # noqa
|
|
||||||
config_path = config_path or CONF.api_paste_config
|
|
||||||
self.config_path = utils.find_config(config_path)
|
|
||||||
|
|
||||||
def load_app(self, name):
|
|
||||||
"""Return the paste URLMap wrapped WSGI application.
|
|
||||||
|
|
||||||
:param name: Name of the application to load.
|
|
||||||
:returns: Paste URLMap object wrapping the requested application.
|
|
||||||
:raises: `cinder.exception.PasteAppNotFound`
|
|
||||||
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
return deploy.loadapp("config:%s" % self.config_path, name=name)
|
|
||||||
except LookupError:
|
|
||||||
LOG.exception(_LE("Error loading app %s"), name)
|
|
||||||
raise exception.PasteAppNotFound(name=name, path=self.config_path)
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ warnings.simplefilter('once', DeprecationWarning)
|
|||||||
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
from oslo_service import wsgi
|
||||||
|
|
||||||
from cinder import i18n
|
from cinder import i18n
|
||||||
i18n.enable_lazy()
|
i18n.enable_lazy()
|
||||||
@@ -30,7 +31,6 @@ i18n.enable_lazy()
|
|||||||
from cinder.common import config # noqa
|
from cinder.common import config # noqa
|
||||||
from cinder import rpc
|
from cinder import rpc
|
||||||
from cinder import version
|
from cinder import version
|
||||||
from cinder.wsgi import common as wsgi_common
|
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
|
|
||||||
@@ -42,4 +42,4 @@ def initialize_application():
|
|||||||
logging.setup(CONF, "cinder")
|
logging.setup(CONF, "cinder")
|
||||||
|
|
||||||
rpc.init(CONF)
|
rpc.init(CONF)
|
||||||
return wsgi_common.Loader().load_app(name='osapi_volume')
|
return wsgi.Loader(CONF).load_app(name='osapi_volume')
|
||||||
|
|||||||
Reference in New Issue
Block a user