fe6cf0f8a2
Restore static direct connections which may be useful for services running RPC on controllers only and talking to agents via other means (ssh for example). Change-Id: Icbe45978cb4a8ba5db74e5593ea7be23cba3f44e
207 lines
9.2 KiB
Python
207 lines
9.2 KiB
Python
# Copyright 2016 Mirantis, Inc.
|
|
#
|
|
# 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.
|
|
|
|
import socket
|
|
|
|
from oslo_config import cfg
|
|
|
|
from oslo_messaging._drivers import base
|
|
from oslo_messaging import server
|
|
|
|
|
|
MATCHMAKER_BACKENDS = ('redis', 'sentinel', 'dummy')
|
|
MATCHMAKER_DEFAULT = 'redis'
|
|
|
|
|
|
zmq_opts = [
|
|
cfg.StrOpt('rpc_zmq_bind_address', default='*',
|
|
deprecated_group='DEFAULT',
|
|
help='ZeroMQ bind address. Should be a wildcard (*), '
|
|
'an ethernet interface, or IP. '
|
|
'The "host" option should point or resolve to this '
|
|
'address.'),
|
|
|
|
cfg.StrOpt('rpc_zmq_matchmaker', default=MATCHMAKER_DEFAULT,
|
|
choices=MATCHMAKER_BACKENDS,
|
|
deprecated_group='DEFAULT',
|
|
help='MatchMaker driver.'),
|
|
|
|
cfg.IntOpt('rpc_zmq_contexts', default=1,
|
|
deprecated_group='DEFAULT',
|
|
help='Number of ZeroMQ contexts, defaults to 1.'),
|
|
|
|
cfg.IntOpt('rpc_zmq_topic_backlog',
|
|
deprecated_group='DEFAULT',
|
|
help='Maximum number of ingress messages to locally buffer '
|
|
'per topic. Default is unlimited.'),
|
|
|
|
cfg.StrOpt('rpc_zmq_ipc_dir', default='/var/run/openstack',
|
|
deprecated_group='DEFAULT',
|
|
help='Directory for holding IPC sockets.'),
|
|
|
|
cfg.StrOpt('rpc_zmq_host', default=socket.gethostname(),
|
|
sample_default='localhost',
|
|
deprecated_group='DEFAULT',
|
|
help='Name of this node. Must be a valid hostname, FQDN, or '
|
|
'IP address. Must match "host" option, if running Nova.'),
|
|
|
|
cfg.IntOpt('zmq_linger', default=-1,
|
|
deprecated_group='DEFAULT',
|
|
deprecated_name='rpc_cast_timeout',
|
|
help='Number of seconds to wait before all pending '
|
|
'messages will be sent after closing a socket. '
|
|
'The default value of -1 specifies an infinite linger '
|
|
'period. The value of 0 specifies no linger period. '
|
|
'Pending messages shall be discarded immediately '
|
|
'when the socket is closed. Positive values specify an '
|
|
'upper bound for the linger period.'),
|
|
|
|
cfg.IntOpt('rpc_poll_timeout', default=1,
|
|
deprecated_group='DEFAULT',
|
|
help='The default number of seconds that poll should wait. '
|
|
'Poll raises timeout exception when timeout expired.'),
|
|
|
|
cfg.IntOpt('zmq_target_expire', default=300,
|
|
deprecated_group='DEFAULT',
|
|
help='Expiration timeout in seconds of a name service record '
|
|
'about existing target ( < 0 means no timeout).'),
|
|
|
|
cfg.IntOpt('zmq_target_update', default=180,
|
|
deprecated_group='DEFAULT',
|
|
help='Update period in seconds of a name service record '
|
|
'about existing target.'),
|
|
|
|
cfg.BoolOpt('use_pub_sub', default=False,
|
|
deprecated_group='DEFAULT',
|
|
help='Use PUB/SUB pattern for fanout methods. '
|
|
'PUB/SUB always uses proxy.'),
|
|
|
|
cfg.BoolOpt('use_router_proxy', default=False,
|
|
deprecated_group='DEFAULT',
|
|
help='Use ROUTER remote proxy.'),
|
|
|
|
cfg.BoolOpt('use_dynamic_connections', default=False,
|
|
help='This option makes direct connections dynamic or static. '
|
|
'It makes sense only with use_router_proxy=False which '
|
|
'means to use direct connections for direct message '
|
|
'types (ignored otherwise).'),
|
|
|
|
cfg.PortOpt('rpc_zmq_min_port',
|
|
default=49153,
|
|
deprecated_group='DEFAULT',
|
|
help='Minimal port number for random ports range.'),
|
|
|
|
cfg.IntOpt('rpc_zmq_max_port',
|
|
min=1,
|
|
max=65536,
|
|
default=65536,
|
|
deprecated_group='DEFAULT',
|
|
help='Maximal port number for random ports range.'),
|
|
|
|
cfg.IntOpt('rpc_zmq_bind_port_retries',
|
|
default=100,
|
|
deprecated_group='DEFAULT',
|
|
help='Number of retries to find free port number before '
|
|
'fail with ZMQBindError.'),
|
|
|
|
cfg.StrOpt('rpc_zmq_serialization', default='json',
|
|
choices=('json', 'msgpack'),
|
|
deprecated_group='DEFAULT',
|
|
help='Default serialization mechanism for '
|
|
'serializing/deserializing outgoing/incoming messages'),
|
|
|
|
cfg.BoolOpt('zmq_immediate', default=True,
|
|
help='This option configures round-robin mode in zmq socket. '
|
|
'True means not keeping a queue when server side '
|
|
'disconnects. False means to keep queue and messages '
|
|
'even if server is disconnected, when the server '
|
|
'appears we send all accumulated messages to it.'),
|
|
|
|
cfg.IntOpt('zmq_tcp_keepalive', default=-1,
|
|
help='Enable/disable TCP keepalive (KA) mechanism. '
|
|
'The default value of -1 (or any other negative value) '
|
|
'means to skip any overrides and leave it to OS default; '
|
|
'0 and 1 (or any other positive value) mean to '
|
|
'disable and enable the option respectively.'),
|
|
|
|
cfg.IntOpt('zmq_tcp_keepalive_idle', default=-1,
|
|
help='The duration between two keepalive transmissions in '
|
|
'idle condition. '
|
|
'The unit is platform dependent, for example, '
|
|
'seconds in Linux, milliseconds in Windows etc. '
|
|
'The default value of -1 (or any other negative value '
|
|
'and 0) means to skip any overrides and leave it '
|
|
'to OS default.'),
|
|
|
|
cfg.IntOpt('zmq_tcp_keepalive_cnt', default=-1,
|
|
help='The number of retransmissions to be carried out before '
|
|
'declaring that remote end is not available. '
|
|
'The default value of -1 (or any other negative value '
|
|
'and 0) means to skip any overrides and leave it '
|
|
'to OS default.'),
|
|
|
|
cfg.IntOpt('zmq_tcp_keepalive_intvl', default=-1,
|
|
help='The duration between two successive keepalive '
|
|
'retransmissions, if acknowledgement to the previous '
|
|
'keepalive transmission is not received. '
|
|
'The unit is platform dependent, for example, '
|
|
'seconds in Linux, milliseconds in Windows etc. '
|
|
'The default value of -1 (or any other negative value '
|
|
'and 0) means to skip any overrides and leave it '
|
|
'to OS default.'),
|
|
|
|
cfg.IntOpt('rpc_thread_pool_size', default=100,
|
|
help='Maximum number of (green) threads to work concurrently.'),
|
|
|
|
cfg.IntOpt('rpc_message_ttl', default=300,
|
|
help='Expiration timeout in seconds of a sent/received message '
|
|
'after which it is not tracked anymore by a '
|
|
'client/server.'),
|
|
|
|
cfg.BoolOpt('rpc_use_acks', default=False,
|
|
help='Wait for message acknowledgements from receivers. '
|
|
'This mechanism works only via proxy without PUB/SUB.'),
|
|
|
|
cfg.IntOpt('rpc_ack_timeout_base', default=15,
|
|
help='Number of seconds to wait for an ack from a cast/call. '
|
|
'After each retry attempt this timeout is multiplied by '
|
|
'some specified multiplier.'),
|
|
|
|
cfg.IntOpt('rpc_ack_timeout_multiplier', default=2,
|
|
help='Number to multiply base ack timeout by after each retry '
|
|
'attempt.'),
|
|
|
|
cfg.IntOpt('rpc_retry_attempts', default=3,
|
|
help='Default number of message sending attempts in case '
|
|
'of any problems occurred: positive value N means '
|
|
'at most N retries, 0 means no retries, None or -1 '
|
|
'(or any other negative values) mean to retry forever. '
|
|
'This option is used only if acknowledgments are '
|
|
'enabled.'),
|
|
|
|
cfg.ListOpt('subscribe_on',
|
|
default=[],
|
|
help='List of publisher hosts SubConsumer can subscribe on. '
|
|
'This option has higher priority then the default '
|
|
'publishers list taken from the matchmaker.'),
|
|
]
|
|
|
|
|
|
def register_opts(conf):
|
|
opt_group = cfg.OptGroup(name='oslo_messaging_zmq',
|
|
title='ZeroMQ driver options')
|
|
conf.register_opts(zmq_opts, group=opt_group)
|
|
conf.register_opts(server._pool_opts)
|
|
conf.register_opts(base.base_opts)
|