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%2FShardTransaction.java;h=ebec5a101491690f891605fd7908a1dac7aac0c3;hp=600ec393971ffe72efd12dfaaaf472cc61edd204;hb=8e6e0aeb5ca474cb292aab6ca581e921b0a56489;hpb=107324809285bfbb9890cba38ffa18390f8de4bd diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java index 600ec39397..ebec5a1014 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java @@ -16,7 +16,6 @@ import akka.japi.Creator; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActorWithMetering; -import org.opendaylight.controller.cluster.datastore.TransactionProxy.TransactionType; import org.opendaylight.controller.cluster.datastore.exceptions.UnknownMessageException; import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats; import org.opendaylight.controller.cluster.datastore.messages.CloseTransaction; @@ -38,35 +37,25 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * Handles Messages
* ----------------
*
  • {@link org.opendaylight.controller.cluster.datastore.messages.ReadData} - *
  • {@link org.opendaylight.controller.cluster.datastore.messages.WriteData} - *
  • {@link org.opendaylight.controller.cluster.datastore.messages.MergeData} - *
  • {@link org.opendaylight.controller.cluster.datastore.messages.DeleteData} - *
  • {@link org.opendaylight.controller.cluster.datastore.messages.ReadyTransaction} *
  • {@link org.opendaylight.controller.cluster.datastore.messages.CloseTransaction} *

    */ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering { - - protected static final boolean SERIALIZED_REPLY = true; - private final ActorRef shardActor; private final ShardStats shardStats; private final String transactionID; - private final short clientTxVersion; - protected ShardTransaction(ActorRef shardActor, ShardStats shardStats, String transactionID, - short clientTxVersion) { + protected ShardTransaction(ActorRef shardActor, ShardStats shardStats, String transactionID) { super("shard-tx"); //actor name override used for metering. This does not change the "real" actor name this.shardActor = shardActor; this.shardStats = shardStats; - this.transactionID = transactionID; - this.clientTxVersion = clientTxVersion; + this.transactionID = Preconditions.checkNotNull(transactionID); } public static Props props(TransactionType type, AbstractShardDataTreeTransaction transaction, ActorRef shardActor, - DatastoreContext datastoreContext, ShardStats shardStats, String transactionID, short txnClientVersion) { + DatastoreContext datastoreContext, ShardStats shardStats, String transactionID) { return Props.create(new ShardTransactionCreator(type, transaction, shardActor, - datastoreContext, shardStats, transactionID, txnClientVersion)); + datastoreContext, shardStats, transactionID)); } protected abstract AbstractShardDataTreeTransaction getDOMStoreTransaction(); @@ -79,13 +68,9 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering return transactionID; } - protected short getClientTxVersion() { - return clientTxVersion; - } - @Override public void handleReceive(Object message) throws Exception { - if (message.getClass().equals(CloseTransaction.SERIALIZABLE_CLASS)) { + if (CloseTransaction.isSerializedType(message)) { closeTransaction(true); } else if (message instanceof ReceiveTimeout) { if(LOG.isDebugEnabled()) { @@ -105,7 +90,7 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering getDOMStoreTransaction().abort(); if(sendReply && returnCloseTransactionReply()) { - getSender().tell(CloseTransactionReply.INSTANCE.toSerializable(), getSelf()); + getSender().tell(new CloseTransactionReply(), getSelf()); } getSelf().tell(PoisonPill.getInstance(), getSelf()); @@ -120,31 +105,25 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering return ret; } - protected void readData(AbstractShardDataTreeTransaction transaction, ReadData message, - final boolean returnSerialized) { - + protected void readData(AbstractShardDataTreeTransaction transaction, ReadData message) { if (checkClosed(transaction)) { return; } final YangInstanceIdentifier path = message.getPath(); Optional> optional = transaction.getSnapshot().readNode(path); - ReadDataReply readDataReply = new ReadDataReply(optional.orNull(), clientTxVersion); - sender().tell((returnSerialized ? readDataReply.toSerializable(): readDataReply), self()); + ReadDataReply readDataReply = new ReadDataReply(optional.orNull(), message.getVersion()); + sender().tell(readDataReply.toSerializable(), self()); } - protected void dataExists(AbstractShardDataTreeTransaction transaction, DataExists message, - final boolean returnSerialized) { - + protected void dataExists(AbstractShardDataTreeTransaction transaction, DataExists message) { if (checkClosed(transaction)) { return; } final YangInstanceIdentifier path = message.getPath(); boolean exists = transaction.getSnapshot().readNode(path).isPresent(); - DataExistsReply dataExistsReply = DataExistsReply.create(exists); - getSender().tell(returnSerialized ? dataExistsReply.toSerializable() : - dataExistsReply, getSelf()); + getSender().tell(new DataExistsReply(exists, message.getVersion()).toSerializable(), getSelf()); } private static class ShardTransactionCreator implements Creator { @@ -156,17 +135,15 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering final DatastoreContext datastoreContext; final ShardStats shardStats; final String transactionID; - final short txnClientVersion; final TransactionType type; ShardTransactionCreator(TransactionType type, AbstractShardDataTreeTransaction transaction, ActorRef shardActor, - DatastoreContext datastoreContext, ShardStats shardStats, String transactionID, short txnClientVersion) { + DatastoreContext datastoreContext, ShardStats shardStats, String transactionID) { this.transaction = Preconditions.checkNotNull(transaction); this.shardActor = shardActor; this.shardStats = shardStats; this.datastoreContext = datastoreContext; - this.transactionID = transactionID; - this.txnClientVersion = txnClientVersion; + this.transactionID = Preconditions.checkNotNull(transactionID); this.type = type; } @@ -176,15 +153,15 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering switch (type) { case READ_ONLY: tx = new ShardReadTransaction(transaction, shardActor, - shardStats, transactionID, txnClientVersion); + shardStats, transactionID); break; case READ_WRITE: tx = new ShardReadWriteTransaction((ReadWriteShardDataTreeTransaction)transaction, - shardActor, shardStats, transactionID, txnClientVersion); + shardActor, shardStats, transactionID); break; case WRITE_ONLY: tx = new ShardWriteTransaction((ReadWriteShardDataTreeTransaction)transaction, - shardActor, shardStats, transactionID, txnClientVersion); + shardActor, shardStats, transactionID); break; default: throw new IllegalArgumentException("Unhandled transaction type " + type);