Sync rpc from oslo-incubator.

This includes the following changes:

 * use oslo.config directly
 * implementation of rpc-amqp-fast-reply-queue
 * simplifications to bin/nova-rpc-zmq-receiver
 * add new join_consumer_pool API call
 * a bug fix to ensure kombu messages get acked even when an exception
   occurs in the message callback

Change-Id: I813ce0ee7d5442d7b5b0f9d477949adabc83174e
This commit is contained in:
Russell Bryant
2013-02-18 20:50:45 -05:00
parent 1142fbae8a
commit fa4ffefc64

View File

@@ -22,9 +22,6 @@ import contextlib
import os import os
import sys import sys
from oslo.config import cfg
import zmq
# If ../nova/__init__.py exists, add ../ to Python search path, so that # If ../nova/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python... # it will override what happens to be installed in /usr/(local/)lib/python...
POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
@@ -33,45 +30,22 @@ POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'nova', '__init__.py')): if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'nova', '__init__.py')):
sys.path.insert(0, POSSIBLE_TOPDIR) sys.path.insert(0, POSSIBLE_TOPDIR)
from nova import config from oslo.config import cfg
from nova import exception
from nova.openstack.common import log as logging from nova.openstack.common import log as logging
from nova.openstack.common import rpc from nova.openstack.common import rpc
from nova.openstack.common.rpc import impl_zmq from nova.openstack.common.rpc import impl_zmq
from nova import utils
CONF = cfg.CONF CONF = cfg.CONF
CONF.register_opts(rpc.rpc_opts) CONF.register_opts(rpc.rpc_opts)
CONF.register_opts(impl_zmq.zmq_opts) CONF.register_opts(impl_zmq.zmq_opts)
CONF(sys.argv[1:], project='nova')
def main(): def main():
config.parse_args(sys.argv)
logging.setup("nova") logging.setup("nova")
utils.monkey_patch()
ipc_dir = CONF.rpc_zmq_ipc_dir
# Create the necessary directories/files for this service.
if not os.path.isdir(ipc_dir):
try:
utils.execute('mkdir', '-p', ipc_dir, run_as_root=True)
utils.execute('chown', "%s:%s" % (os.getuid(), os.getgid()),
ipc_dir, run_as_root=True)
utils.execute('chmod', '750', ipc_dir, run_as_root=True)
except exception.ProcessExecutionError:
logging.error(_("Could not create IPC socket directory."))
return
with contextlib.closing(impl_zmq.ZmqProxy(CONF)) as reactor: with contextlib.closing(impl_zmq.ZmqProxy(CONF)) as reactor:
consume_in = "tcp://%s:%s" % \
(CONF.rpc_zmq_bind_address,
CONF.rpc_zmq_port)
consumption_proxy = impl_zmq.InternalContext(None)
reactor.register(consumption_proxy,
consume_in, zmq.PULL, out_bind=True)
reactor.consume_in_thread() reactor.consume_in_thread()
reactor.wait() reactor.wait()