X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShardTransactionFactory.java;h=76838dd2f83dc4bec45730e741dc5b8b47ad1686;hp=9637646fc554207746aba1db325eca26de74fbfa;hb=b124e8216055ee30a87207c8b8a95e5c9661f291;hpb=7df9909614131c0870267732277d7aa78501afdc diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransactionFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransactionFactory.java index 9637646fc5..76838dd2f8 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransactionFactory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransactionFactory.java @@ -9,9 +9,9 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorRef; import akka.actor.UntypedActorContext; +import com.google.common.base.Preconditions; import org.opendaylight.controller.cluster.datastore.identifiers.ShardTransactionIdentifier; import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats; -import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransaction; /** * A factory for creating ShardTransaction actors. @@ -20,16 +20,16 @@ import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransaction; */ class ShardTransactionActorFactory { - private final DOMTransactionFactory domTransactionFactory; + private final ShardDataTree dataTree; private final DatastoreContext datastoreContext; private final String txnDispatcherPath; private final ShardStats shardMBean; private final UntypedActorContext actorContext; private final ActorRef shardActor; - ShardTransactionActorFactory(DOMTransactionFactory domTransactionFactory, DatastoreContext datastoreContext, + ShardTransactionActorFactory(ShardDataTree dataTree, DatastoreContext datastoreContext, String txnDispatcherPath, ActorRef shardActor, UntypedActorContext actorContext, ShardStats shardMBean) { - this.domTransactionFactory = domTransactionFactory; + this.dataTree = Preconditions.checkNotNull(dataTree); this.datastoreContext = datastoreContext; this.txnDispatcherPath = txnDispatcherPath; this.shardMBean = shardMBean; @@ -37,14 +37,28 @@ class ShardTransactionActorFactory { this.shardActor = shardActor; } - ActorRef newShardTransaction(TransactionProxy.TransactionType type, ShardTransactionIdentifier transactionID, - String transactionChainID, short clientVersion) { + ActorRef newShardTransaction(TransactionType type, ShardTransactionIdentifier transactionID, + String transactionChainID) { + final AbstractShardDataTreeTransaction transaction; + switch (type) { + case READ_ONLY: + transaction = dataTree.newReadOnlyTransaction(transactionID.toString(), transactionChainID); + shardMBean.incrementReadOnlyTransactionCount(); + break; + case READ_WRITE: + transaction = dataTree.newReadWriteTransaction(transactionID.toString(), transactionChainID); + shardMBean.incrementReadWriteTransactionCount(); + break; + case WRITE_ONLY: + transaction = dataTree.newReadWriteTransaction(transactionID.toString(), transactionChainID); + shardMBean.incrementWriteOnlyTransactionCount(); + break; + default: + throw new IllegalArgumentException("Unsupported transaction type " + type); + } - DOMStoreTransaction transaction = domTransactionFactory.newTransaction(type, transactionID.toString(), - transactionChainID); - - return actorContext.actorOf(ShardTransaction.props(transaction, shardActor, datastoreContext, shardMBean, - transactionID.getRemoteTransactionId(), clientVersion).withDispatcher(txnDispatcherPath), + return actorContext.actorOf(ShardTransaction.props(type, transaction, shardActor, datastoreContext, shardMBean, + transactionID.getRemoteTransactionId()).withDispatcher(txnDispatcherPath), transactionID.toString()); } }