X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShardTransactionChain.java;h=42bd257ad1cdb97b3d28ab2588bbe6161894b8e9;hb=758e3e3b16e73298221a78872149814baf735c7d;hp=50042411b17eeb0b0428963535008e8a777ca915;hpb=11e9ade9af527aba7faeb633d3c9c7552fd09d2d;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransactionChain.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransactionChain.java index 50042411b1..42bd257ad1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransactionChain.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransactionChain.java @@ -11,11 +11,11 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorRef; import akka.actor.Props; import akka.japi.Creator; + import org.opendaylight.controller.cluster.datastore.messages.CloseTransactionChain; import org.opendaylight.controller.cluster.datastore.messages.CloseTransactionChainReply; import org.opendaylight.controller.cluster.datastore.messages.CreateTransaction; import org.opendaylight.controller.cluster.datastore.messages.CreateTransactionReply; -import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionChain; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -25,10 +25,13 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class ShardTransactionChain extends AbstractUntypedActor { private final DOMStoreTransactionChain chain; + private final ShardContext shardContext; private final SchemaContext schemaContext; - public ShardTransactionChain(DOMStoreTransactionChain chain, SchemaContext schemaContext) { + public ShardTransactionChain(DOMStoreTransactionChain chain, SchemaContext schemaContext, + ShardContext shardContext) { this.chain = chain; + this.shardContext = shardContext; this.schemaContext = schemaContext; } @@ -41,27 +44,68 @@ public class ShardTransactionChain extends AbstractUntypedActor { chain.close(); getSender().tell(new CloseTransactionChainReply().toSerializable(), getSelf()); }else{ - throw new Exception("Not recognized message recieved="+message); + unknownMessage(message); + } + } + + private ActorRef getShardActor(){ + return getContext().parent(); + } + + private ActorRef createTypedTransactionActor(CreateTransaction createTransaction, + String transactionId) { + if(createTransaction.getTransactionType() == + TransactionProxy.TransactionType.READ_ONLY.ordinal()) { + return getContext().actorOf( + ShardTransaction.props( chain.newReadOnlyTransaction(), getShardActor(), + schemaContext, shardContext), transactionId); + } else if (createTransaction.getTransactionType() == + TransactionProxy.TransactionType.READ_WRITE.ordinal()) { + return getContext().actorOf( + ShardTransaction.props( chain.newReadWriteTransaction(), getShardActor(), + schemaContext, shardContext), transactionId); + } else if (createTransaction.getTransactionType() == + TransactionProxy.TransactionType.WRITE_ONLY.ordinal()) { + return getContext().actorOf( + ShardTransaction.props( chain.newWriteOnlyTransaction(), getShardActor(), + schemaContext, shardContext), transactionId); + } else { + throw new IllegalArgumentException ( + "CreateTransaction message has unidentified transaction type=" + + createTransaction.getTransactionType()); } } private void createTransaction(CreateTransaction createTransaction) { - DOMStoreReadWriteTransaction transaction = - chain.newReadWriteTransaction(); - ActorRef transactionActor = getContext().actorOf(ShardTransaction - .props(chain, transaction, getContext().parent(), schemaContext), "shard-" + createTransaction.getTransactionId()); + + ActorRef transactionActor = createTypedTransactionActor(createTransaction, "shard-" + createTransaction.getTransactionId()); getSender() .tell(new CreateTransactionReply(transactionActor.path().toString(),createTransaction.getTransactionId()).toSerializable(), getSelf()); } - public static Props props(final DOMStoreTransactionChain chain, final SchemaContext schemaContext) { - return Props.create(new Creator() { + public static Props props(DOMStoreTransactionChain chain, SchemaContext schemaContext, + ShardContext shardContext) { + return Props.create(new ShardTransactionChainCreator(chain, schemaContext, shardContext)); + } + + private static class ShardTransactionChainCreator implements Creator { + private static final long serialVersionUID = 1L; + + final DOMStoreTransactionChain chain; + final ShardContext shardContext; + final SchemaContext schemaContext; - @Override - public ShardTransactionChain create() throws Exception { - return new ShardTransactionChain(chain, schemaContext); - } - }); + ShardTransactionChainCreator(DOMStoreTransactionChain chain, SchemaContext schemaContext, + ShardContext shardContext) { + this.chain = chain; + this.shardContext = shardContext; + this.schemaContext = schemaContext; + } + + @Override + public ShardTransactionChain create() throws Exception { + return new ShardTransactionChain(chain, schemaContext, shardContext); + } } }