diff options
author | Martin Ritchie <ritchiem@apache.org> | 2009-04-10 23:53:11 +0000 |
---|---|---|
committer | Martin Ritchie <ritchiem@apache.org> | 2009-04-10 23:53:11 +0000 |
commit | 4dc9c8f6f03903d111a417a4bc000d11d6182dfb (patch) | |
tree | b46bf830a487a4eba0bc81eb89d2cc4d699d2a04 /java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java | |
parent | df547bcb4497395ed5536ffd72b713d87187e97f (diff) | |
download | qpid-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.java | 37 |
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; + } + } /** |