This patch moves message sending closer to ack receiving. As a
result we get more uniform load on servers and more reliable
behavior when some proxies suddenly shut down.
Change-Id: I0bc7b94c8259fcaa590c111bc5437520cdd302ef
* Refactored RoutingTable, in order to work on string target
representation.
* RoutingTableAdaptor - provides usable adaptation of RoutingTable
to use with Target object.
* RoutingTableUpdater - implements asynchronous table updates
from the matchmaker.
* Implemented dynamic connections for DealerPublisherDirect
* Use dynamic connections for direct messages
Change-Id: I20a76c3b2e8f9e71ffcc5ac658fbc659ad4c8153
--debug, --is-cast and --is-fanout are defined as args of type=bool.
This means that, for example, if we want to enable debug logging
level, we have to type '--debug True'. But we can also use
'--debug False' in order to do the same, which is very misleading
(in fact, any non-empty string will evaluate to True). This patch
tries to solve this problem by replacing type=bool and
default=False with action='store_true' for these args, so that
we will be able to enable them (they will remain False by default
as before) simply as '--debug' etc.
Change-Id: I8ee04c35427df446966161491da8d264b44975bf
Since proxy supposed to be used in different configurations
second ROUTER socket may stay unused (e.g. when we use proxy
for publishing only fanout messages in mixed direct/pub-sub
configuration see ZmqClientMixDirectPubSub).
This patch introduces two modes of proxy SingleRouterProxy (where
frontend and backend ROUTERS are the same socket) and
DoubleRouterProxy (different sockets for the frontend and for the
backend - the original behavior).
Change-Id: Ia859b92e1f238fcbbcf42e17b06e0f4ad04e79f6
The MatchmakerRedis depends on 'redis' package, but there is no error
handler in it.
This patch adds processing to raise an exception when 'redis' package
doesn't exist.
Change-Id: Ib611543c76336ed1d4a204cd9b3c97cf468ad833
Closes-Bug: #1624256
According to the RabbitMQ client docs [1], the only valid login
methods are: PLAIN, AMQPLAIN, or RABBIT-CR-DEMO. This patch restricts
the rabbit driver to only those options.
[1] https://www.rabbitmq.com/authentication.html
Change-Id: I193f33adf4ecc1c0fd29ddc08b35533f24f1c967
This patch simply replaces all delimeters used for generating
internal identifiers like redis keys or socket identities
with slashes (since they are visually better for debugging than
dots, hyphens or underscores, which may also occur inside
topic or server names).
Change-Id: I8e8e80f467404a87a2526c80c8fae6cba5880c6d
This patch fix incorrect fanout behavior when use_pub_sub=False.
In addition it also makes dummy matchmaker behave similar to (already
fixed here) redis one in order to make future testing more realistic
(relevant tests were also fixed and refactored).
Change-Id: Ie131de189972250ea2d9b99fe65b5908b7144569
Closes-Bug: #1622968
During rally tests it was discovered that the latency between
receiving message and dispatching it can reach up to 10 minutes.
This behaviour breaks the mechanism of acks and retries in zmq driver,
which causes test failures. This patch tries to fix these problems
by moving ack sending from rpc server's thread to zmq dealer
consumer's thread (immediately after message receiving).
Change-Id: If33d14006ffa947baf5c34c8b1f61f336432374f
In oslo_messaging/_drivers/impl_rabbit.py, the documentation of
the Consumer class is the following: """Init the Publisher class
with the exchange_name, routing_key, type, durable auto_delete""".
This should be corrected by putting Consumer instead of Publisher.
Closes-Bug: 1623550
Change-Id: I77d09aeb1268ed79590a8b02ab5bf370f3b72caf
Rework the inline documentation for executors, RPC servers and
clients, notifiers and notification listeners for clarity and flow.
Change-Id: If4f1db853a7fc85340177fd2c9c43a479d72459d
Consumer declaration consist of the next steps:
1) declare an exchange
2) declare a queue
3) bind the queue to the exchange
Due to reply exchanges are auto-delete, at the
step 3 the exchange can be removed and consumer.declare()
will raise `queue.bind 404 Exchange not found`.
So, in this case the queue is exist and AMQPListener
just call consumer.consume() on the queue and go to
drain_events() despite on the fact that the queue is
unbound.
This change tries to redeclare queue/exchange proactively
each times channel change and just before consuming messages.
Co-Authored-By: Mehdi Abaakouk <sileht@redhat.com>
Closes-Bug: #1609766
Change-Id: Id8b48df3d26675d72955d417ce7622b1e8aa6195
This patch makes message serialization in the pika driver
configurable.
Change-Id: Ib86cb91110aa89663a54afdd9932d60f6f45f585
Depends-On: Idb12666255a990dfc8f8ff6b43e941b3481b9c1c
This patch removes unused close_linger attribute. Even if this value
will be ever needed, it can always be obtained via getsockopt.
Change-Id: I30a6f0876836d77d7cbf700a8035d9341810b959