Author: rgodfrey
Date: Wed Oct 17 12:42:14 2007
New Revision: 585642

URL: http://svn.apache.org/viewvc?rev=585642&view=rev
Log:
QPID-645 : TxnBuffer should rethrow exceptions encountered on commit

Modified:
    
incubator/qpid/branches/M2.1/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java
    
incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java

Modified: 
incubator/qpid/branches/M2.1/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java?rev=585642&r1=585641&r2=585642&view=diff
==============================================================================
--- 
incubator/qpid/branches/M2.1/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java
 (original)
+++ 
incubator/qpid/branches/M2.1/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java
 Wed Oct 17 12:42:14 2007
@@ -54,7 +54,7 @@
         _ops.clear();
     }
 
-    private boolean prepare(StoreContext context)
+    private boolean prepare(StoreContext context) throws AMQException
     {
         for (int i = 0; i < _ops.size(); i++)
         {
@@ -63,19 +63,31 @@
             {
                 op.prepare(context);
             }
-            catch (Exception e)
+            catch (AMQException e)
             {
-                //compensate previously prepared ops
-                for (int j = 0; j < i; j++)
-                {
-                    _ops.get(j).undoPrepare();
-                }
-                return false;
+                undoPrepare(i);
+                throw e;
+            }
+            catch (RuntimeException e)
+            {
+                undoPrepare(i);
+                throw e;
             }
         }
         return true;
     }
 
+    private void undoPrepare(int lastPrepared)
+    {
+        //compensate previously prepared ops
+        for (int j = 0; j < lastPrepared; j++)
+        {
+            _ops.get(j).undoPrepare();
+        }
+    }
+
+       
+       
     public void rollback(StoreContext context) throws AMQException
     {
         for (TxnOp op : _ops)

Modified: 
incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java?rev=585642&r1=585641&r2=585642&view=diff
==============================================================================
--- 
incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java
 (original)
+++ 
incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java
 Wed Oct 17 12:42:14 2007
@@ -27,6 +27,7 @@
 import org.apache.qpid.server.store.StoreContext;
 
 import java.util.LinkedList;
+import java.util.NoSuchElementException;
 
 public class TxnBufferTest extends TestCase
 {
@@ -78,7 +79,16 @@
         buffer.enlist(new FailedPrepare());
         buffer.enlist(new MockOp());
 
-        buffer.commit(null);
+               try
+        {
+            buffer.commit(null);
+            
+        }
+        catch (NoSuchElementException e)
+        {
+
+        }
+
         validateOps();
         store.validate();
     }


Reply via email to