aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/transaction
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-01-24 12:34:39 +0100
committerHarald Musum <musum@oath.com>2018-01-24 12:34:39 +0100
commit4fabd087beef62eb9e08eee3a65f23a14efc96b4 (patch)
treed5661f1ad247d21721fd4fb4245cea60da42a881 /vespajlib/src/main/java/com/yahoo/transaction
parent3f77fca1c8d5aa495452e7f86457965058bf923e (diff)
Throw if commit() is called more than once
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/transaction')
-rw-r--r--vespajlib/src/main/java/com/yahoo/transaction/NestedTransaction.java6
1 files changed, 6 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/transaction/NestedTransaction.java b/vespajlib/src/main/java/com/yahoo/transaction/NestedTransaction.java
index c860e9ead4f..af22cb77690 100644
--- a/vespajlib/src/main/java/com/yahoo/transaction/NestedTransaction.java
+++ b/vespajlib/src/main/java/com/yahoo/transaction/NestedTransaction.java
@@ -24,6 +24,9 @@ public final class NestedTransaction implements AutoCloseable {
/** A list of (non-transactional) operations to execute after this transaction has committed successfully */
private final List<Runnable> onCommitted = new ArrayList<>(2);
+ /** Updated when commit() is done, to be able to track if someone tries to commit a second time */
+ private boolean committed = false;
+
/**
* Adds a transaction to this.
*
@@ -45,6 +48,8 @@ public final class NestedTransaction implements AutoCloseable {
/** Perform a 2 phase commit */
public void commit() {
+ if (committed) throw new IllegalStateException("Transaction already committed");
+
List<Transaction> organizedTransactions = organizeTransactions(transactions);
// First phase
@@ -75,6 +80,7 @@ public final class NestedTransaction implements AutoCloseable {
log.log(Level.WARNING, "A committed task in " + this + " caused an exception", e);
}
}
+ committed = true;
}
public void onCommitted(Runnable runnable) {