summaryrefslogtreecommitdiff
path: root/java/broker/src
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2007-10-17 19:42:14 +0000
committerRobert Godfrey <rgodfrey@apache.org>2007-10-17 19:42:14 +0000
commitda48691cb4f28fc5b1f4ce4eb1d557c1f752ad44 (patch)
tree20ae1dd6a69f9ff8da557e814a99eb5fb15e0290 /java/broker/src
parentea120fa96d784bcca44c92329a3f1598841522fb (diff)
downloadqpid-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
Diffstat (limited to 'java/broker/src')
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/txn/TxnBuffer.java28
1 files changed, 20 insertions, 8 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)