X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-spi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcore%2Fspi%2Fdata%2FAbstractSnapshotBackedTransactionChain.java;h=9898ce9bb95d24b524497ab12339067514688a74;hb=8aa59fb1d2d9591ecd8af541e7f5d89167bae7af;hp=b7776b2a397940745501a6c87ffcdd5625d10dcc;hpb=559c2b6afa7714572e01b52029acaa4d5a7315e2;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/AbstractSnapshotBackedTransactionChain.java b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/AbstractSnapshotBackedTransactionChain.java index b7776b2a39..9898ce9bb9 100644 --- a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/AbstractSnapshotBackedTransactionChain.java +++ b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/AbstractSnapshotBackedTransactionChain.java @@ -32,7 +32,7 @@ public abstract class AbstractSnapshotBackedTransactionChain extends Transact * * @return A new snapshot */ - protected abstract DataTreeSnapshot getSnapshot(); + protected abstract DataTreeSnapshot getSnapshot(Object transactionId); } private static final class Idle extends State { @@ -43,7 +43,7 @@ public abstract class AbstractSnapshotBackedTransactionChain extends Transact } @Override - protected DataTreeSnapshot getSnapshot() { + protected DataTreeSnapshot getSnapshot(Object transactionId) { return chain.takeSnapshot(); } } @@ -66,9 +66,10 @@ public abstract class AbstractSnapshotBackedTransactionChain extends Transact } @Override - protected DataTreeSnapshot getSnapshot() { + protected DataTreeSnapshot getSnapshot(Object transactionId) { final DataTreeSnapshot ret = snapshot; - Preconditions.checkState(ret != null, "Previous transaction %s is not ready yet", transaction.getIdentifier()); + Preconditions.checkState(ret != null, "Could not get snapshot for transaction %s - previous transaction %s is not ready yet", + transactionId, transaction.getIdentifier()); return ret; } @@ -89,7 +90,7 @@ public abstract class AbstractSnapshotBackedTransactionChain extends Transact } @Override - protected DataTreeSnapshot getSnapshot() { + protected DataTreeSnapshot getSnapshot(Object transactionId) { throw new IllegalStateException(message); } } @@ -108,9 +109,9 @@ public abstract class AbstractSnapshotBackedTransactionChain extends Transact state = idleState; } - private Entry getSnapshot() { + private Entry getSnapshot(T transactionId) { final State localState = state; - return new SimpleEntry<>(localState, localState.getSnapshot()); + return new SimpleEntry<>(localState, localState.getSnapshot(transactionId)); } private boolean recordTransaction(final State expected, final DOMStoreWriteTransaction transaction) { @@ -120,19 +121,27 @@ public abstract class AbstractSnapshotBackedTransactionChain extends Transact @Override public final DOMStoreReadTransaction newReadOnlyTransaction() { - final Entry entry = getSnapshot(); - return SnapshotBackedTransactions.newReadTransaction(nextTransactionIdentifier(), getDebugTransactions(), entry.getValue()); + return newReadOnlyTransaction(nextTransactionIdentifier()); + } + + protected DOMStoreReadTransaction newReadOnlyTransaction(T transactionId) { + final Entry entry = getSnapshot(transactionId); + return SnapshotBackedTransactions.newReadTransaction(transactionId, getDebugTransactions(), entry.getValue()); } @Override public final DOMStoreReadWriteTransaction newReadWriteTransaction() { + return newReadWriteTransaction(nextTransactionIdentifier()); + } + + protected DOMStoreReadWriteTransaction newReadWriteTransaction(T transactionId) { Entry entry; DOMStoreReadWriteTransaction ret; do { - entry = getSnapshot(); - ret = new SnapshotBackedReadWriteTransaction(nextTransactionIdentifier(), - getDebugTransactions(), entry.getValue(), this); + entry = getSnapshot(transactionId); + ret = new SnapshotBackedReadWriteTransaction<>(transactionId, getDebugTransactions(), entry.getValue(), + this); } while (!recordTransaction(entry.getKey(), ret)); return ret; @@ -140,13 +149,16 @@ public abstract class AbstractSnapshotBackedTransactionChain extends Transact @Override public final DOMStoreWriteTransaction newWriteOnlyTransaction() { + return newWriteOnlyTransaction(nextTransactionIdentifier()); + } + + protected DOMStoreWriteTransaction newWriteOnlyTransaction(T transactionId) { Entry entry; DOMStoreWriteTransaction ret; do { - entry = getSnapshot(); - ret = new SnapshotBackedWriteTransaction(nextTransactionIdentifier(), - getDebugTransactions(), entry.getValue(), this); + entry = getSnapshot(transactionId); + ret = new SnapshotBackedWriteTransaction<>(transactionId, getDebugTransactions(), entry.getValue(), this); } while (!recordTransaction(entry.getKey(), ret)); return ret;