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 sys
from oslo.config import cfg
import zmq
# 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...
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')):
sys.path.insert(0, POSSIBLE_TOPDIR)
from nova import config
from nova import exception
from oslo.config import cfg
from nova.openstack.common import log as logging
from nova.openstack.common import rpc
from nova.openstack.common.rpc import impl_zmq
from nova import utils
CONF = cfg.CONF
CONF.register_opts(rpc.rpc_opts)
CONF.register_opts(impl_zmq.zmq_opts)
CONF(sys.argv[1:], project='nova')
def main():
config.parse_args(sys.argv)
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:
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.wait()