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%2FShardWriteTransaction.java;h=67f2c684a15743e86c0855010bd72c492baf7fd3;hb=99f80f27bee37bb23e345420bf14bb7bb4793c28;hp=1a50d9b06f1b62f93c488d19c9d57c686ca76b3a;hpb=e448e4e5f1f071aa61152b2f49b239d878c0a580;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardWriteTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardWriteTransaction.java index 1a50d9b06f..67f2c684a1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardWriteTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardWriteTransaction.java @@ -11,7 +11,7 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorRef; import akka.actor.PoisonPill; -import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats; +import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.messages.BatchedModifications; import org.opendaylight.controller.cluster.datastore.messages.BatchedModificationsReply; import org.opendaylight.controller.cluster.datastore.messages.DataExists; @@ -20,8 +20,9 @@ import org.opendaylight.controller.cluster.datastore.messages.ReadData; import org.opendaylight.controller.cluster.datastore.modification.Modification; /** - * @author: syedbahm - * Date: 8/6/14 + * Actor for a shard write-only transaction. + * + * @author syedbahm */ public class ShardWriteTransaction extends ShardTransaction { @@ -29,9 +30,9 @@ public class ShardWriteTransaction extends ShardTransaction { private Exception lastBatchedModificationsException; private final ReadWriteShardDataTreeTransaction transaction; - public ShardWriteTransaction(ReadWriteShardDataTreeTransaction transaction, ActorRef shardActor, - ShardStats shardStats, String transactionID, short clientTxVersion) { - super(shardActor, shardStats, transactionID, clientTxVersion); + public ShardWriteTransaction(final ReadWriteShardDataTreeTransaction transaction, final ActorRef shardActor, + final ShardStats shardStats) { + super(shardActor, shardStats, transaction.getIdentifier()); this.transaction = transaction; } @@ -41,8 +42,7 @@ public class ShardWriteTransaction extends ShardTransaction { } @Override - public void handleReceive(Object message) throws Exception { - + public void handleReceive(final Object message) { if (message instanceof BatchedModifications) { batchedModifications((BatchedModifications)message); } else { @@ -50,7 +50,8 @@ public class ShardWriteTransaction extends ShardTransaction { } } - private void batchedModifications(BatchedModifications batched) { + @SuppressWarnings("checkstyle:IllegalCatch") + private void batchedModifications(final BatchedModifications batched) { if (checkClosed()) { if (batched.isReady()) { getSelf().tell(PoisonPill.getInstance(), getSelf()); @@ -59,23 +60,23 @@ public class ShardWriteTransaction extends ShardTransaction { } try { - for(Modification modification: batched.getModifications()) { + for (Modification modification: batched.getModifications()) { modification.apply(transaction.getSnapshot()); } totalBatchedModificationsReceived++; - if(batched.isReady()) { - if(lastBatchedModificationsException != null) { + if (batched.isReady()) { + if (lastBatchedModificationsException != null) { throw lastBatchedModificationsException; } - if(totalBatchedModificationsReceived != batched.getTotalMessagesSent()) { + if (totalBatchedModificationsReceived != batched.getTotalMessagesSent()) { throw new IllegalStateException(String.format( "The total number of batched messages received %d does not match the number sent %d", totalBatchedModificationsReceived, batched.getTotalMessagesSent())); } - readyTransaction(false, batched.isDoCommitOnReady()); + readyTransaction(batched); } else { getSender().tell(new BatchedModificationsReply(batched.getModifications().size()), getSelf()); } @@ -83,36 +84,36 @@ public class ShardWriteTransaction extends ShardTransaction { lastBatchedModificationsException = e; getSender().tell(new akka.actor.Status.Failure(e), getSelf()); - if(batched.isReady()) { + if (batched.isReady()) { getSelf().tell(PoisonPill.getInstance(), getSelf()); } } } - protected final void dataExists(DataExists message) { + protected final void dataExists(final DataExists message) { super.dataExists(transaction, message); } - protected final void readData(ReadData message) { + protected final void readData(final ReadData message) { super.readData(transaction, message); } private boolean checkClosed() { - if (transaction.isClosed()) { - getSender().tell(new akka.actor.Status.Failure(new IllegalStateException("Transaction is closed, no modifications allowed")), getSelf()); - return true; - } else { - return false; + final boolean ret = transaction.isClosed(); + if (ret) { + getSender().tell(new akka.actor.Status.Failure(new IllegalStateException( + "Transaction is closed, no modifications allowed")), getSelf()); } + return ret; } - private void readyTransaction(boolean returnSerialized, boolean doImmediateCommit) { - String transactionID = getTransactionID(); + private void readyTransaction(final BatchedModifications batched) { + TransactionIdentifier transactionID = getTransactionId(); LOG.debug("readyTransaction : {}", transactionID); - getShardActor().forward(new ForwardedReadyTransaction(transactionID, getClientTxVersion(), - transaction, returnSerialized, doImmediateCommit), getContext()); + getShardActor().forward(new ForwardedReadyTransaction(transactionID, batched.getVersion(), + transaction, batched.isDoCommitOnReady(), batched.getParticipatingShardNames()), getContext()); // The shard will handle the commit from here so we're no longer needed - self-destruct. getSelf().tell(PoisonPill.getInstance(), getSelf());