diff options
author | Robert Godfrey <rgodfrey@apache.org> | 2007-10-17 19:42:14 +0000 |
---|---|---|
committer | Robert Godfrey <rgodfrey@apache.org> | 2007-10-17 19:42:14 +0000 |
commit | da48691cb4f28fc5b1f4ce4eb1d557c1f752ad44 (patch) | |
tree | 20ae1dd6a69f9ff8da557e814a99eb5fb15e0290 | |
parent | ea120fa96d784bcca44c92329a3f1598841522fb (diff) | |
download | qpid-python-da48691cb4f28fc5b1f4ce4eb1d557c1f752ad44.tar.gz |
QPID-645 : TxnBuffer should rethrow exceptions encountered on commit
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2.1@585642 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java | 28 | ||||
-rw-r--r-- | java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java | 12 |
2 files changed, 31 insertions, 9 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java b/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java index 405c233552..46a68b6a23 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java +++ b/java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java @@ -54,7 +54,7 @@ public class TxnBuffer _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 @@ public class TxnBuffer { 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) diff --git a/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java b/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java index 1d9e30c24e..025f8d89f6 100644 --- a/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java +++ b/java/systests/src/main/java/org/apache/qpid/server/txn/TxnBufferTest.java @@ -27,6 +27,7 @@ import org.apache.qpid.server.store.TestableMemoryMessageStore; import org.apache.qpid.server.store.StoreContext; import java.util.LinkedList; +import java.util.NoSuchElementException; public class TxnBufferTest extends TestCase { @@ -78,7 +79,16 @@ public class TxnBufferTest extends TestCase buffer.enlist(new FailedPrepare()); buffer.enlist(new MockOp()); - buffer.commit(null); + try + { + buffer.commit(null); + + } + catch (NoSuchElementException e) + { + + } + validateOps(); store.validate(); } |