diff options
author | Harald Musum <musum@oath.com> | 2018-01-24 12:34:39 +0100 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2018-01-24 12:34:39 +0100 |
commit | 4fabd087beef62eb9e08eee3a65f23a14efc96b4 (patch) | |
tree | d5661f1ad247d21721fd4fb4245cea60da42a881 /vespajlib | |
parent | 3f77fca1c8d5aa495452e7f86457965058bf923e (diff) |
Throw if commit() is called more than once
Diffstat (limited to 'vespajlib')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/transaction/NestedTransaction.java | 6 | ||||
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/transaction/NestedTransactionTestCase.java | 13 |
2 files changed, 19 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) { diff --git a/vespajlib/src/test/java/com/yahoo/transaction/NestedTransactionTestCase.java b/vespajlib/src/test/java/com/yahoo/transaction/NestedTransactionTestCase.java index 4feb0869aa0..60facf7e4af 100644 --- a/vespajlib/src/test/java/com/yahoo/transaction/NestedTransactionTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/transaction/NestedTransactionTestCase.java @@ -91,6 +91,19 @@ public class NestedTransactionTestCase { } } + @Test + public void testMoreThanOneCommitThrows() { + NestedTransaction t = new NestedTransaction(); + t.add(new TransactionTypeA("A1"), TransactionTypeB.class); + t.commit(); + try { + t.commit(); + fail("Expected exception"); + } + catch (IllegalStateException expected) { + } + } + private static class TransactionTypeA extends MockTransaction { public TransactionTypeA(String name) { super(name); } } |