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;
public class ShardTransactionChain extends AbstractUntypedActor {
private final DOMStoreTransactionChain chain;
+ private final DatastoreContext datastoreContext;
private final SchemaContext schemaContext;
+ private final String shardName;
- public ShardTransactionChain(DOMStoreTransactionChain chain, SchemaContext schemaContext) {
+ public ShardTransactionChain(DOMStoreTransactionChain chain, SchemaContext schemaContext,
+ DatastoreContext datastoreContext,String shardName) {
this.chain = chain;
+ this.datastoreContext = datastoreContext;
this.schemaContext = schemaContext;
+ this.shardName = shardName;
}
@Override
chain.close();
getSender().tell(new CloseTransactionChainReply().toSerializable(), getSelf());
}else{
- throw new Exception("Not recognized message recieved="+message);
+ unknownMessage(message);
}
}
- private ActorRef createTypedTransactionActor(CreateTransaction createTransaction,String transactionId){
- if(createTransaction.getTransactionType()== TransactionProxy.TransactionType.READ_ONLY.ordinal()){
- return getContext().actorOf(
- ShardTransaction.props( chain.newReadOnlyTransaction(), getSelf(), schemaContext), transactionId);
-
- }else if (createTransaction.getTransactionType()== TransactionProxy.TransactionType.READ_WRITE.ordinal()){
- return getContext().actorOf(
- ShardTransaction.props( chain.newReadWriteTransaction(), getSelf(), schemaContext), transactionId);
-
+ private ActorRef getShardActor(){
+ return getContext().parent();
+ }
- }else if (createTransaction.getTransactionType()== TransactionProxy.TransactionType.WRITE_ONLY.ordinal()){
- return getContext().actorOf(
- ShardTransaction.props( chain.newWriteOnlyTransaction(), getSelf(), schemaContext), transactionId);
- }else{
- throw new IllegalArgumentException ("CreateTransaction message has unidentified transaction type="+createTransaction.getTransactionType()) ;
+ private ActorRef createTypedTransactionActor(CreateTransaction createTransaction,
+ String transactionId) {
+ if(createTransaction.getTransactionType() ==
+ TransactionProxy.TransactionType.READ_ONLY.ordinal()) {
+ return getContext().actorOf(
+ ShardTransaction.props( chain.newReadOnlyTransaction(), getShardActor(),
+ schemaContext, datastoreContext,shardName), transactionId);
+ } else if (createTransaction.getTransactionType() ==
+ TransactionProxy.TransactionType.READ_WRITE.ordinal()) {
+ return getContext().actorOf(
+ ShardTransaction.props( chain.newReadWriteTransaction(), getShardActor(),
+ schemaContext, datastoreContext,shardName), transactionId);
+ } else if (createTransaction.getTransactionType() ==
+ TransactionProxy.TransactionType.WRITE_ONLY.ordinal()) {
+ return getContext().actorOf(
+ ShardTransaction.props( chain.newWriteOnlyTransaction(), getShardActor(),
+ schemaContext, datastoreContext,shardName), transactionId);
+ } else {
+ throw new IllegalArgumentException (
+ "CreateTransaction message has unidentified transaction type=" +
+ createTransaction.getTransactionType());
+ }
}
- }
private void createTransaction(CreateTransaction createTransaction) {
getSelf());
}
- public static Props props(final DOMStoreTransactionChain chain, final SchemaContext schemaContext) {
- return Props.create(new Creator<ShardTransactionChain>() {
+ public static Props props(DOMStoreTransactionChain chain, SchemaContext schemaContext,
+ DatastoreContext datastoreContext, String shardName) {
+ return Props.create(new ShardTransactionChainCreator(chain, schemaContext, datastoreContext, shardName));
+ }
+
+ private static class ShardTransactionChainCreator implements Creator<ShardTransactionChain> {
+ private static final long serialVersionUID = 1L;
+
+ final DOMStoreTransactionChain chain;
+ final DatastoreContext datastoreContext;
+ final SchemaContext schemaContext;
+ final String shardName;
+
- @Override
- public ShardTransactionChain create() throws Exception {
- return new ShardTransactionChain(chain, schemaContext);
- }
- });
+ ShardTransactionChainCreator(DOMStoreTransactionChain chain, SchemaContext schemaContext,
+ DatastoreContext datastoreContext, String shardName) {
+ this.chain = chain;
+ this.datastoreContext = datastoreContext;
+ this.schemaContext = schemaContext;
+ this.shardName = shardName;
+ }
+
+ @Override
+ public ShardTransactionChain create() throws Exception {
+ return new ShardTransactionChain(chain, schemaContext, datastoreContext,shardName);
+ }
}
}