Repository: activemq Updated Branches: refs/heads/master 993d56194 -> b2327db3b
https://issues.apache.org/jira/browse/AMQ-6133 Disabling async queue message store when persistJMSRedelivered is turned on for a destination. That flag will cause a sync update later on dispatch which can cause a race condition if the original message add is processed after the update. This can cause a duplicate message to be stored. Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/b2327db3 Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/b2327db3 Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/b2327db3 Branch: refs/heads/master Commit: b2327db3b79dffd42fd5c6ba85720a5d9c302052 Parents: 993d561 Author: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com> Authored: Fri Apr 1 16:38:17 2016 +0000 Committer: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com> Committed: Fri Apr 1 16:40:45 2016 +0000 ---------------------------------------------------------------------- .../src/main/java/org/apache/activemq/broker/region/Queue.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/b2327db3/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java ---------------------------------------------------------------------- diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java b/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java index be00a9d..84597b1 100755 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java @@ -833,7 +833,11 @@ public class Queue extends BaseDestination implements Task, UsageListener, Index if (store != null && message.isPersistent()) { message.getMessageId().setFutureOrSequenceLong(null); try { - if (messages.isCacheEnabled()) { + //AMQ-6133 - don't store async if using persistJMSRedelivered + //This flag causes a sync update later on dispatch which can cause a race + //condition if the original add is processed after the update, which can cause + //a duplicate message to be stored + if (messages.isCacheEnabled() && !isPersistJMSRedelivered()) { result = store.asyncAddQueueMessage(context, message, isOptimizeStorage()); final PendingMarshalUsageTracker tracker = new PendingMarshalUsageTracker(message); result.addListener(new Runnable() {