
The oslo.messaging library takes the existing RPC code from oslo and wraps it in a sane API with well defined semantics around which we can make a commitment to retain compatibility in future. The patch is large, but the changes can be summarized as: * oslo.messaging>=1.3.0a4 is required; a proper 1.3.0 release will be pushed before the icehouse release candidates. * The new rpc module has init() and cleanup() methods which manage the global oslo.messaging transport state. The TRANSPORT and NOTIFIER globals are conceptually similar to the current RPCIMPL global, except we're free to create and use alternate Transport objects in e.g. the cells code. * The rpc.get_{client,server,notifier}() methods are just helpers which wrap the global messaging state, specifiy serializers and specify the use of the eventlet executor. * In oslo.messaging, a request context is expected to be a dict so we add a RequestContextSerializer which can serialize to and from dicts using RequestContext.{to,from}_dict() * The allowed_rpc_exception_modules configuration option is replaced by an allowed_remote_exmods get_transport() parameter. This is not something that users ever need to configure, but it is something each project using oslo.messaging needs to be able to customize. * We maintain a global NOTIFIER object and create specializations of it with specific publisher IDs in order to avoid notification driver loading overhead. * rpc.py contains transport aliases for backwards compatibility purposes. setup.cfg also contains notification driver aliases for backwards compat. * The messaging options are moved about in cinder.conf.sample because the options are advertised via a oslo.config.opts entry point and picked up by the generator. * We use messaging.ConfFixture in tests to override oslo.messaging config options, rather than making assumptions about the options registered by the library. Implements blueprint: oslo-messaging Change-Id: Ib912809428d92e788558439e2d85b51272ebefdd
61 lines
1.9 KiB
Python
Executable File
61 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Copyright 2010 United States Government as represented by the
|
|
# Administrator of the National Aeronautics and Space Administration.
|
|
# 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.
|
|
|
|
"""Starter script for Cinder OS API."""
|
|
|
|
import eventlet
|
|
eventlet.monkey_patch()
|
|
|
|
import os
|
|
import sys
|
|
|
|
from oslo.config import cfg
|
|
|
|
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
|
|
os.pardir,
|
|
os.pardir))
|
|
if os.path.exists(os.path.join(possible_topdir, "cinder", "__init__.py")):
|
|
sys.path.insert(0, possible_topdir)
|
|
|
|
from cinder.openstack.common import gettextutils
|
|
gettextutils.enable_lazy()
|
|
gettextutils.install('cinder', lazy=True)
|
|
|
|
# Need to register global_opts
|
|
from cinder.common import config # noqa
|
|
from cinder.openstack.common import log as logging
|
|
from cinder import rpc
|
|
from cinder import service
|
|
from cinder import utils
|
|
from cinder import version
|
|
|
|
|
|
CONF = cfg.CONF
|
|
|
|
|
|
if __name__ == '__main__':
|
|
CONF(sys.argv[1:], project='cinder',
|
|
version=version.version_string())
|
|
logging.setup("cinder")
|
|
utils.monkey_patch()
|
|
|
|
rpc.init(CONF)
|
|
launcher = service.process_launcher()
|
|
server = service.WSGIService('osapi_volume')
|
|
launcher.launch_service(server, workers=server.workers or 1)
|
|
launcher.wait()
|