From a2623cc3ea1988eb9911935cf5042e59d2336a7c Mon Sep 17 00:00:00 2001 From: Keith Wall Date: Wed, 30 Nov 2011 13:58:14 +0000 Subject: QPID-3642: Fix for redelivery regression found by python tests Applied patch from Andrew MacBean and Oleksandr Rudyy git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1208435 13f79535-47bb-0310-9956-ffa450edef68 --- .../server/subscription/Subscription_0_10.java | 13 +++--- .../qpid/server/transport/ServerSession.java | 2 +- .../org/apache/qpid/client/AMQSession_0_10.java | 4 -- .../client/redelivered/RedeliveredMessageTest.java | 50 ++++++++++++++++++++++ 4 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 java/systests/src/main/java/org/apache/qpid/client/redelivered/RedeliveredMessageTest.java (limited to 'java') diff --git a/java/broker/src/main/java/org/apache/qpid/server/subscription/Subscription_0_10.java b/java/broker/src/main/java/org/apache/qpid/server/subscription/Subscription_0_10.java index 273bab0ebe..99f2d6cbc2 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/subscription/Subscription_0_10.java +++ b/java/broker/src/main/java/org/apache/qpid/server/subscription/Subscription_0_10.java @@ -643,27 +643,26 @@ public class Subscription_0_10 implements Subscription, FlowCreditManager.FlowCr }); } - void reject(QueueEntry entry) + void reject(final QueueEntry entry) { entry.setRedelivered(); entry.routeToAlternate(); } - void release(QueueEntry entry, boolean setRedelivered) + void release(final QueueEntry entry, final boolean setRedelivered) { - boolean maxDeliveryLimitExceeded = false; if (setRedelivered) { entry.setRedelivered(); - maxDeliveryLimitExceeded = isMaxDeliveryLimitExceeded(entry); } - else + + if (getSession().isClosing() || !setRedelivered) { entry.decrementDeliveryCount(); } - if (maxDeliveryLimitExceeded) + if (isMaxDeliveryLimitReached(entry)) { sendToDLQOrDiscard(entry); } @@ -708,7 +707,7 @@ public class Subscription_0_10 implements Subscription, FlowCreditManager.FlowCr } } - private boolean isMaxDeliveryLimitExceeded(QueueEntry entry) + private boolean isMaxDeliveryLimitReached(QueueEntry entry) { final int maxDeliveryLimit = entry.getQueue().getMaximumDeliveryCount(); return (maxDeliveryLimit > 0 && entry.getDeliveryCount() >= maxDeliveryLimit); diff --git a/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java b/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java index ac95750e66..337d1f02cc 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java +++ b/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java @@ -350,7 +350,7 @@ public class ServerSession extends Session implements AuthorizationHolder, Sessi _transaction.rollback(); for(MessageDispositionChangeListener listener : _messageDispositionListenerMap.values()) { - listener.onRelease(false); + listener.onRelease(true); } _messageDispositionListenerMap.clear(); diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java b/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java index dde020a750..705e53d138 100644 --- a/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java +++ b/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java @@ -405,10 +405,6 @@ public class AMQSession_0_10 extends AMQSession