From da48691cb4f28fc5b1f4ce4eb1d557c1f752ad44 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Wed, 17 Oct 2007 19:42:14 +0000 Subject: 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 --- .../java/org/apache/qpid/server/txn/TxnBuffer.java | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'java/broker') 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) -- cgit v1.2.1