Gary Tully created AMQ-4485:
-------------------------------
Summary: Skipped message dispatch with concurrent transacted sends
at cursor memory limit
Key: AMQ-4485
URL: https://issues.apache.org/jira/browse/AMQ-4485
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 5.8.0
Reporter: Gary Tully
Assignee: Gary Tully
Fix For: 5.9.0
With multiple concurrent transacted sends, transaction synchronisation after
completions are used to update the cursors.
These happen independent of the order that the store is updated, and hence the
store order index.
When the cache is exhausted, a callback to the store to mark the end of caching
assumes matching order. If scheduling has swapped the order, it is possible to
mark the order index past what is cached and it is possible to skip a dispatch.
Alternatively it is possible to mark too early which results in duplicate
dispatch if the audit is disabled or exhausted.
The senario that exposed this occurrence used concurrent transacted sends to
100 destinations with slow consumers. Leaving scope for out of order processing
and ensuring that the cache is exhausted.
Using a large destination memory limit or systemUsage limit or useCache=false
policy entry will avoid this problem. The order is only important when the
cache is exhausted.
In the skipped case, the message appears on the queue but is not consumable,
however it is consumable after a restart.
The proper fix is to ensure cursors are updated in the same order as the store.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira