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 | 6ec7de67d683434d778cb55f5664891b35cc9071 (patch) | |
| tree | 7275afd94530860cf167ee6c8c14f404529c3c0c /qpid/java | |
| parent | 478a46b504e3a6577af388ea737e4dafcc24334a (diff) | |
| download | qpid-python-6ec7de67d683434d778cb55f5664891b35cc9071.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@764111 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
| -rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java index dcbd887896..cb19532872 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java +++ b/qpid/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; + } + } /** |
