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%2FShard.java;h=02a14022c4366d1cef8380da0183e8ec19e56a4a;hb=175f38490b56c4b4e0ec356b17b91f887b295da4;hp=250e3f854f488049f33e6e87ba68baaf99797b46;hpb=8e6e0aeb5ca474cb292aab6ca581e921b0a56489;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java index 250e3f854f..02a14022c4 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java @@ -23,13 +23,13 @@ import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; +import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.common.actor.CommonConfig; import org.opendaylight.controller.cluster.common.actor.MessageTracker; import org.opendaylight.controller.cluster.common.actor.MessageTracker.Error; import org.opendaylight.controller.cluster.common.actor.MeteringBehavior; import org.opendaylight.controller.cluster.datastore.exceptions.NoShardLeaderException; import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; -import org.opendaylight.controller.cluster.datastore.identifiers.ShardTransactionIdentifier; import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardMBeanFactory; import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats; import org.opendaylight.controller.cluster.datastore.messages.AbortTransaction; @@ -51,8 +51,6 @@ import org.opendaylight.controller.cluster.datastore.messages.RegisterChangeList import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeChangeListener; import org.opendaylight.controller.cluster.datastore.messages.ShardLeaderStateChanged; import org.opendaylight.controller.cluster.datastore.messages.UpdateSchemaContext; -import org.opendaylight.controller.cluster.datastore.modification.Modification; -import org.opendaylight.controller.cluster.datastore.modification.MutableCompositeModification; import org.opendaylight.controller.cluster.datastore.utils.Dispatchers; import org.opendaylight.controller.cluster.notifications.LeaderStateChanged; import org.opendaylight.controller.cluster.notifications.RegisterRoleChangeListener; @@ -65,7 +63,6 @@ import org.opendaylight.controller.cluster.raft.base.messages.FollowerInitialSyn import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply; import org.opendaylight.controller.cluster.raft.messages.ServerRemoved; import org.opendaylight.yangtools.concepts.Identifier; -import org.opendaylight.yangtools.util.StringIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType; @@ -173,7 +170,8 @@ public class Shard extends RaftActor { new Dispatchers(context().system().dispatchers()).getDispatcherPath( Dispatchers.DispatcherType.Transaction), self(), getContext(), shardMBean); - snapshotCohort = new ShardSnapshotCohort(transactionActorFactory, store, LOG, this.name); + snapshotCohort = new ShardSnapshotCohort(builder.getId().getMemberName(), transactionActorFactory, store, + LOG, this.name); messageRetrySupport = new ShardTransactionMessageRetrySupport(this); } @@ -337,7 +335,7 @@ public class Shard extends RaftActor { private void handleCommitTransaction(final CommitTransaction commit) { if (isLeader()) { - if(!commitCoordinator.handleCommit(new StringIdentifier(commit.getTransactionID()), getSender(), this)) { + if(!commitCoordinator.handleCommit(commit.getTransactionID(), getSender(), this)) { shardMBean.incrementFailedTransactionsCount(); } } else { @@ -436,7 +434,7 @@ public class Shard extends RaftActor { LOG.debug("{}: Can committing transaction {}", persistenceId(), canCommit.getTransactionID()); if (isLeader()) { - commitCoordinator.handleCanCommit(new StringIdentifier(canCommit.getTransactionID()), getSender(), this); + commitCoordinator.handleCanCommit(canCommit.getTransactionID(), getSender(), this); } else { ActorSelection leader = getLeader(); if (leader == null) { @@ -566,8 +564,8 @@ public class Shard extends RaftActor { doAbortTransaction(abort.getTransactionID(), getSender()); } - void doAbortTransaction(final String transactionID, final ActorRef sender) { - commitCoordinator.handleAbort(new StringIdentifier(transactionID), sender, this); + void doAbortTransaction(final TransactionIdentifier transactionID, final ActorRef sender) { + commitCoordinator.handleAbort(transactionID, sender, this); } private void handleCreateTransaction(final Object message) { @@ -593,7 +591,7 @@ public class Shard extends RaftActor { } ActorRef transactionActor = createTransaction(createTransaction.getTransactionType(), - createTransaction.getTransactionId(), createTransaction.getTransactionChainId()); + createTransaction.getTransactionId()); getSender().tell(new CreateTransactionReply(Serialization.serializedActorPath(transactionActor), createTransaction.getTransactionId(), createTransaction.getVersion()).toSerializable(), getSelf()); @@ -602,15 +600,14 @@ public class Shard extends RaftActor { } } - private ActorRef createTransaction(int transactionType, String remoteTransactionId, String transactionChainId) { - ShardTransactionIdentifier transactionId = new ShardTransactionIdentifier(remoteTransactionId); + private ActorRef createTransaction(int transactionType, TransactionIdentifier transactionId) { LOG.debug("{}: Creating transaction : {} ", persistenceId(), transactionId); return transactionActorFactory.newShardTransaction(TransactionType.fromInt(transactionType), - transactionId, transactionChainId); + transactionId); } - private void commitWithNewTransaction(final Modification modification) { - ReadWriteShardDataTreeTransaction tx = store.newReadWriteTransaction(modification.toString(), null); + private void commitWithNewTransaction(final BatchedModifications modification) { + ReadWriteShardDataTreeTransaction tx = store.newReadWriteTransaction(modification.getTransactionID()); modification.apply(tx.getSnapshot()); try { snapshotCohort.syncCommitTransaction(tx); @@ -695,7 +692,11 @@ public class Shard extends RaftActor { } else if(clientActor == null) { // There's no clientActor to which to send a commit reply so we must be applying // replicated state from the leader. - commitWithNewTransaction(MutableCompositeModification.fromSerializable(modification)); + + // The only implementation we know of is BatchedModifications, which also carries a transaction + // identifier -- which we really need that. + Preconditions.checkArgument(modification instanceof BatchedModifications); + commitWithNewTransaction((BatchedModifications)modification); } else { // This must be the OK to commit after replication consensus. finishCommit(clientActor, identifier);