21 Commits

Author SHA1 Message Date
Kenneth Giusti
bc46e64711 [AMQP 1.0] Avoid unnecessary thread switch on ack
Avoid blocking the RPC Server thread when it attempts to acknowledge
the RPC request message.  Blocking is unnecessary as the acknowledge
command does not return a status and can be processed asynchronously
from the server thread.

Avoiding this context switch improves overall RPC call throughput
according to the simulator tool by approximately ten percent on my
test systems.

Change-Id: I71548eb6f9f7dcaf74cb426d4e9b369b54856419
2016-10-11 10:11:35 -04:00
Kenneth Giusti
03ef584218 cast() and RPC replies should not block waiting for endpoint to ack
This patch fixes cast() and RPC replies so they do not block the
caller once the messages have been written to the link.  In both of
these cases messages are sent "at most once" with best effort.

If a negative acknowledgment is received a warning is logged.

Change-Id: I84671c62544ec388421ecd0ccafc267c3c3d6087
Closes-Bug: #1630637
2016-10-06 13:11:14 -04:00
Kenneth Giusti
9775ed3cce Remove debug logs from fast path
Decrease the size of the debug log output drastically by removing
debug messages issued for each message.  This patch only removes those
log statements that log correct behavior - errant behavior is still
logged for debug.

Change-Id: I1c67e6ed7e503ef3b9543fdfce31b91c46bd851a
2016-10-03 16:31:35 -04:00
Kenneth Giusti
6c973dae22 [AMQP 1.0] Make the default settlement behavior configurable
This patch allows the ack processing behavior to be configured based
on the type of message sent.  This allows the proper ack behavior for
a given backend to be customized. By default Cast messages are now
sent pre-acked (best effort).

Change-Id: I0d4e44a7a87f3c917a3eb44f6e02af74a9af10a5
Closes-Bug: #1616612
2016-08-24 15:56:51 -04:00
Jenkins
ba387dfd1c Merge "[AMQP 1.0] small fixes to improve timer scalability" into feature/amqp-dispatch-router 2016-08-17 05:49:40 +00:00
Jenkins
5d5596a43d Merge "[AMQP 1.0] Add link credit configuration options" into feature/amqp-dispatch-router 2016-08-16 01:01:01 +00:00
Kenneth Giusti
b7717e1616 [AMQP 1.0] small fixes to improve timer scalability
This patch introduces the following tweaks to the timer
implementation:

Reduce the number of timers that need to be tracked by reducing the
timer granularity to units of seconds.

Decrease the default timeout values to further reduce the total number
of tracked timers.

Batch multiple expiring events that share the same deadline.

Inline the timer comparison code in the main event loop.

Avoid using an expensive comparison method in the heap sort by using
an integer primitive instead.

Use monotonic time instead of time.time()

Change-Id: I83e86bf203e6a641085e482c7ccf0e01f4fb4d86
2016-08-15 13:30:37 -04:00
Jenkins
cdd279b516 Merge "Remove the max_send_retries option" into feature/amqp-dispatch-router 2016-08-06 20:44:39 +00:00
Kenneth Giusti
480cd78157 [AMQP 1.0] Add link credit configuration options
Change-Id: Ifd483dfc67a4ff18f2047dbdca0aab311124627f
Closes-Bug: 1367911
2016-08-03 14:28:24 -04:00
Jenkins
a2a69c7205 Merge "Set the default link property to allow message acks" into feature/amqp-dispatch-router 2016-08-02 16:19:27 +00:00
Kenneth Giusti
5236e99155 Remove the max_send_retries option
This option was added for feature parity with the rabbitmq driver.
Since then the option was removed from rabbitmq.  Since this option
was never released we can simply remove it rather than deprecating it.

Change-Id: Ic10dd374c865eaf7c7563f379426e171996184a0
Closes-Bug: #1599518
2016-08-01 11:19:06 -04:00
Jenkins
7754698cf7 Merge "Fix a timer leak in the AMQP 1.0 driver" into feature/amqp-dispatch-router 2016-07-29 18:38:33 +00:00
Andrew Smith
b7a6a0715c [AMQP 1.0] Cancel response treatment for detached link
This patch removes an exception that occurs when an rpc reply is canceled
following the detachment of the link.

Change-Id: Ia743f571b293a75d851c0b19549f26673d9a734c
Closes-Bug: #1606557
2016-07-28 08:51:39 -04:00
Kenneth Giusti
3f38e6b03a Set the default link property to allow message acks
Previously the default snd-settle-mode caused the sender to assume the
message would not be acknowledged so the sender never waited for an
acknowledgement.  The 'mixed' setting allows the sender to request
that the receiver acknowledges the message.  The term 'mixed' comes
from the AMQP 1.0 standard.

Change-Id: Ida4e04f0827fff902d692f13ec972b099703adf0
2016-07-25 09:01:44 -04:00
Kenneth Giusti
7fe799d2e0 Fix a timer leak in the AMQP 1.0 driver
Change-Id: Ib89ac2f9e866bab7a62fbdd2b1e8cddce030e944
2016-07-22 14:48:06 -04:00
Kenneth Giusti
4c0674d194 Re-factor the AMQP 1.0 addressing semantics
This patch introduces a new routable addressing format.  This new
address format not only works with traditional broker-based messaging
backends but can be used to optimally route messages across a mesh
messaging topology.  This new addressing format may be enabled either
via configuration or by message bus identification.

This patch moves all of the AMQP 1.0 addressing logic into a new
Addresser class.  This class is used to map an oslo.messaging Target
address and notification flag into a corresponding AMQP 1.0
message/subscription address based on the addressing mode.  This hides
the addressing details from the rest of the driver.

For backward compatibility with previous releases the Addresser can be
configured to automatically detect a non-routable messaging back end
and fall back to using the legacy addressing scheme.

The intention is to use routable addressing as the only form of
addressing supported by the driver regardless of messaging back end.
However before that can happen the legacy addressing must follow the
standard deprecation process.  Until then legacy addressing will
remain available for backwards compatibility.

Change-Id: I6b60b6944a4c44da9b2e41ab2a83ab59f15e396e
2016-07-06 10:28:19 -04:00
Andrew Smith
35ea442a0e [AMQP 1.0] Add acknowledge and requeue handling for incoming message
This patch schedules a controller task to handle the acknowledge or
requeue disposition of the incoming message

Change-Id: I9a53959ce205417481f6442f712a8f238394bdae
Depends-On: Icf4dfbb0be1336e81a2815fe17dbe8428d3df619
Closes-Bug: #1593759
2016-07-01 09:58:36 -04:00
Kenneth Giusti
b1b4cfce8c Refactor AMQP 1.0 command task to support timers
Refactors the Task() classes to support per-send timers and
consolidate message sending logic.

Change-Id: Icf4dfbb0be1336e81a2815fe17dbe8428d3df619
2016-06-14 10:12:51 -04:00
Kenneth Giusti
890ce0e543 Refactor link management to support link recovery
This refactors the driver to process send/subscribe requests as they
arrive from the application rather than blocking these requests until
the reply link is activated.  This allows recoverable failures
occurring at the connection or link level to be applied to the sender
retry count.  This patch also implements link re-connect for
subscriptions.

These changes are required to support a brokerless routed mesh
backend.

Change-Id: I14606de55e2e94d03d865fefe8c8c2327207ba5c
Closes-Bug: #1434540
2016-06-13 11:15:13 -04:00
Andrew Smith
9d51fa4a2f [AMQP 1.0] Randomize host list connection attempts
Randomize the initial selection of the host list for amqp 1.0 connection
attempts.

This patch:
* randomizes initial index
* updates failover unit tests

Change-Id: Iab5ae684a2cd8ec0c6d0c59ffffde5eb5baf883b
2016-05-26 11:54:29 -04:00
Kenneth Giusti
e72a8d5bc4 Reorganize the AMQP 1.0 driver source files
This patch simply moves the existing AMQP 1.0 driver files into a
directory layout that is consistent with the other drivers.  The
driver unit tests are also moved to the proper test directory. There
are no changes in driver functionality or API.

Change-Id: I83a5d5433be8c3b317597100af69192ec5be81f1
Closes-Bug: #1579823
2016-05-13 14:04:37 -04:00