*/
package org.opendaylight.controller.cluster.datastore;
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
+
import akka.actor.ActorSelection;
-import com.google.common.base.Preconditions;
-import org.opendaylight.controller.cluster.datastore.identifiers.TransactionIdentifier;
-import org.opendaylight.controller.cluster.datastore.utils.ActorContext;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort;
-import org.opendaylight.controller.sal.core.spi.data.SnapshotBackedTransactions;
-import org.opendaylight.controller.sal.core.spi.data.SnapshotBackedWriteTransaction;
-import org.opendaylight.controller.sal.core.spi.data.SnapshotBackedWriteTransaction.TransactionReadyPrototype;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
+import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
+import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
+import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction;
+import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadWriteTransaction;
+import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
+import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
+import org.opendaylight.mdsal.dom.spi.store.SnapshotBackedTransactions;
+import org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction;
+import org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction.TransactionReadyPrototype;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.ReadOnlyDataTree;
/**
* {@link LocalTransactionFactory} for instantiating backing transactions which are
final class LocalTransactionFactoryImpl extends TransactionReadyPrototype<TransactionIdentifier>
implements LocalTransactionFactory {
- private static final Logger LOG = LoggerFactory.getLogger(LocalTransactionFactoryImpl.class);
private final ActorSelection leader;
- private final DataTree dataTree;
- private final ActorContext actorContext;
+ private final ReadOnlyDataTree dataTree;
+ private final ActorUtils actorUtils;
- LocalTransactionFactoryImpl(final ActorContext actorContext, final ActorSelection leader, final DataTree dataTree) {
- this.leader = Preconditions.checkNotNull(leader);
- this.dataTree = Preconditions.checkNotNull(dataTree);
- this.actorContext = actorContext;
+ LocalTransactionFactoryImpl(final ActorUtils actorUtils, final ActorSelection leader,
+ final ReadOnlyDataTree dataTree) {
+ this.leader = requireNonNull(leader);
+ this.dataTree = requireNonNull(dataTree);
+ this.actorUtils = actorUtils;
}
- DataTree getDataTree() {
+ ReadOnlyDataTree getDataTree() {
return dataTree;
}
+ @Override
+ public DOMStoreReadTransaction newReadOnlyTransaction(TransactionIdentifier identifier) {
+ return SnapshotBackedTransactions.newReadTransaction(identifier, false, dataTree.takeSnapshot());
+ }
+
@Override
public DOMStoreReadWriteTransaction newReadWriteTransaction(TransactionIdentifier identifier) {
return SnapshotBackedTransactions.newReadWriteTransaction(identifier, false, dataTree.takeSnapshot(), this);
}
+ @Override
+ public DOMStoreWriteTransaction newWriteOnlyTransaction(TransactionIdentifier identifier) {
+ return SnapshotBackedTransactions.newWriteTransaction(identifier, false, dataTree.takeSnapshot(), this);
+ }
+
@Override
protected void transactionAborted(final SnapshotBackedWriteTransaction<TransactionIdentifier> tx) {
// No-op
}
@Override
- protected DOMStoreThreePhaseCommitCohort transactionReady(final SnapshotBackedWriteTransaction<TransactionIdentifier> tx,
- final DataTreeModification tree) {
- return new LocalThreePhaseCommitCohort(actorContext, leader, tx, tree) {
- @Override
- protected void transactionAborted(final SnapshotBackedWriteTransaction<TransactionIdentifier> transaction) {
- // No-op
- LOG.debug("Transaction {} aborted", transaction);
- }
+ protected DOMStoreThreePhaseCommitCohort transactionReady(
+ final SnapshotBackedWriteTransaction<TransactionIdentifier> tx,
+ final DataTreeModification tree,
+ final Exception readyError) {
+ return new LocalThreePhaseCommitCohort(actorUtils, leader, tx, tree, readyError);
+ }
+
+ @SuppressWarnings({"unchecked", "checkstyle:IllegalCatch"})
+ @Override
+ public LocalThreePhaseCommitCohort onTransactionReady(DOMStoreWriteTransaction tx, Exception operationError) {
+ checkArgument(tx instanceof SnapshotBackedWriteTransaction);
+ if (operationError != null) {
+ return new LocalThreePhaseCommitCohort(actorUtils, leader,
+ (SnapshotBackedWriteTransaction<TransactionIdentifier>)tx, operationError);
+ }
- @Override
- protected void transactionCommitted(final SnapshotBackedWriteTransaction<TransactionIdentifier> transaction) {
- // No-op
- LOG.debug("Transaction {} committed", transaction);
- }
- };
+ return (LocalThreePhaseCommitCohort) tx.ready();
}
}