You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2009/04/11 03:02:37 UTC

svn commit: r764130 - /qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java

Author: ritchiem
Date: Sat Apr 11 01:02:37 2009
New Revision: 764130

URL: http://svn.apache.org/viewvc?rev=764130&view=rev
Log:
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.
merged from trunk r764111

Modified:
    qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java

Modified: qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java?rev=764130&r1=764129&r2=764130&view=diff
==============================================================================
--- qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java (original)
+++ qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java Sat Apr 11 01:02:37 2009
@@ -490,26 +490,45 @@
             }
         }
 
+        // 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;
+        }
+
     }
 
     /**



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org