summaryrefslogtreecommitdiff
path: root/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2009-04-10 23:53:11 +0000
committerMartin Ritchie <ritchiem@apache.org>2009-04-10 23:53:11 +0000
commit4dc9c8f6f03903d111a417a4bc000d11d6182dfb (patch)
treeb46bf830a487a4eba0bc81eb89d2cc4d699d2a04 /java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java
parentdf547bcb4497395ed5536ffd72b713d87187e97f (diff)
downloadqpid-python-4dc9c8f6f03903d111a417a4bc000d11d6182dfb.tar.gz
QPID-1793 : Update AMQChannel to remember any AMQException that occurs during requeue and then throws that after it has attempted to requeue all the messsagse from the unackedMap.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@764111 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java')
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java37
1 files changed, 28 insertions, 9 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java b/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java
index dcbd887896..cb19532872 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java
@@ -490,26 +490,45 @@ public class AMQChannel
}
}
+ // Place to hold any error that occured during the requeueing.
+ AMQException error = null;
for (QueueEntry unacked : messagesToBeDelivered)
{
- if (!unacked.isQueueDeleted())
+ try
{
- // Mark message redelivered
- unacked.setRedelivered(true);
+ if (!unacked.isQueueDeleted())
+ {
+ // Mark message redelivered
+ unacked.setRedelivered(true);
- // Ensure message is released for redelivery
- unacked.release();
+ // Ensure message is released for redelivery
+ unacked.release();
- // Deliver Message
- deliveryContext.requeue(unacked);
+ // Deliver Message
+ deliveryContext.requeue(unacked);
+ }
+ else
+ {
+ unacked.dequeueAndDelete(_storeContext);
+ }
}
- else
+ catch (AMQException e)
{
- unacked.dequeueAndDelete(_storeContext);
+ //Log the error and store it
+ _log.error(e.getMessage(),e);
+ // We store the last seen exception for rethrowing after
+ // attempting to process all the entries.
+ error = e;
}
}
+ // If we had an error during the requeue process throw it now.
+ if (error != null)
+ {
+ throw error;
+ }
+
}
/**