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%2FRemoteTransactionContextSupport.java;h=4276f3be52960e0ff9c68cd50adc5d9e591c4db6;hb=refs%2Fchanges%2F02%2F83802%2F42;hp=c1162c2d9385f0b40e644adbf09cfba1a83c07a2;hpb=2d60632f7cf63712e8357a3cf3fc40d83366e5e6;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RemoteTransactionContextSupport.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RemoteTransactionContextSupport.java index c1162c2d93..4276f3be52 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RemoteTransactionContextSupport.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RemoteTransactionContextSupport.java @@ -8,11 +8,13 @@ */ package org.opendaylight.controller.cluster.datastore; +import static java.util.Objects.requireNonNull; + import akka.actor.ActorSelection; import akka.dispatch.OnComplete; import akka.pattern.AskTimeoutException; import akka.util.Timeout; -import com.google.common.base.Preconditions; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.TimeUnit; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.exceptions.NoShardLeaderException; @@ -20,7 +22,7 @@ import org.opendaylight.controller.cluster.datastore.exceptions.ShardLeaderNotRe import org.opendaylight.controller.cluster.datastore.messages.CreateTransaction; import org.opendaylight.controller.cluster.datastore.messages.CreateTransactionReply; import org.opendaylight.controller.cluster.datastore.messages.PrimaryShardInfo; -import org.opendaylight.controller.cluster.datastore.utils.ActorContext; +import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.Future; @@ -61,19 +63,19 @@ final class RemoteTransactionContextSupport { RemoteTransactionContextSupport(final TransactionContextWrapper transactionContextWrapper, final TransactionProxy parent, final String shardName) { - this.parent = Preconditions.checkNotNull(parent); + this.parent = requireNonNull(parent); this.shardName = shardName; this.transactionContextWrapper = transactionContextWrapper; // For the total create tx timeout, use 2 times the election timeout. This should be enough time for // a leader re-election to occur if we happen to hit it in transition. - totalCreateTxTimeout = parent.getActorContext().getDatastoreContext().getShardRaftConfig() + totalCreateTxTimeout = parent.getActorUtils().getDatastoreContext().getShardRaftConfig() .getElectionTimeOutInterval().toMillis() * 2; // We'll use the operationTimeout for the the create Tx message timeout so it can be set appropriately // for unit tests but cap it at MAX_CREATE_TX_MSG_TIMEOUT_IN_MS. The operationTimeout could be set // larger than the totalCreateTxTimeout in production which we don't want. - long operationTimeout = parent.getActorContext().getOperationTimeout().duration().toMillis(); + long operationTimeout = parent.getActorUtils().getOperationTimeout().duration().toMillis(); createTxMessageTimeout = new Timeout(Math.min(operationTimeout, MAX_CREATE_TX_MSG_TIMEOUT_IN_MS), TimeUnit.MILLISECONDS); } @@ -86,8 +88,8 @@ final class RemoteTransactionContextSupport { return parent.getType(); } - private ActorContext getActorContext() { - return parent.getActorContext(); + private ActorUtils getActorUtils() { + return parent.getActorUtils(); } private TransactionIdentifier getIdentifier() { @@ -101,7 +103,7 @@ final class RemoteTransactionContextSupport { this.primaryShardInfo = newPrimaryShardInfo; if (getTransactionType() == TransactionType.WRITE_ONLY - && getActorContext().getDatastoreContext().isWriteOnlyTransactionOptimizationsEnabled()) { + && getActorUtils().getDatastoreContext().isWriteOnlyTransactionOptimizationsEnabled()) { ActorSelection primaryShard = newPrimaryShardInfo.getPrimaryShardActor(); LOG.debug("Tx {} Primary shard {} found - creating WRITE_ONLY transaction context", @@ -126,7 +128,7 @@ final class RemoteTransactionContextSupport { Object serializedCreateMessage = new CreateTransaction(getIdentifier(), getTransactionType().ordinal(), primaryShardInfo.getPrimaryShardVersion()).toSerializable(); - Future createTxFuture = getActorContext().executeOperationAsync( + Future createTxFuture = getActorUtils().executeOperationAsync( primaryShardInfo.getPrimaryShardActor(), serializedCreateMessage, createTxMessageTimeout); createTxFuture.onComplete(new OnComplete() { @@ -134,22 +136,24 @@ final class RemoteTransactionContextSupport { public void onComplete(final Throwable failure, final Object response) { onCreateTransactionComplete(failure, response); } - }, getActorContext().getClientDispatcher()); + }, getActorUtils().getClientDispatcher()); } private void tryFindPrimaryShard() { LOG.debug("Tx {} Retrying findPrimaryShardAsync for shard {}", getIdentifier(), shardName); this.primaryShardInfo = null; - Future findPrimaryFuture = getActorContext().findPrimaryShardAsync(shardName); + Future findPrimaryFuture = getActorUtils().findPrimaryShardAsync(shardName); findPrimaryFuture.onComplete(new OnComplete() { @Override public void onComplete(final Throwable failure, final PrimaryShardInfo newPrimaryShardInfo) { onFindPrimaryShardComplete(failure, newPrimaryShardInfo); } - }, getActorContext().getClientDispatcher()); + }, getActorUtils().getClientDispatcher()); } + @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", + justification = "https://github.com/spotbugs/spotbugs/issues/811") private void onFindPrimaryShardComplete(final Throwable failure, final PrimaryShardInfo newPrimaryShardInfo) { if (failure == null) { this.primaryShardInfo = newPrimaryShardInfo; @@ -185,9 +189,9 @@ final class RemoteTransactionContextSupport { LOG.debug("Tx {}: create tx on shard {} failed with exception \"{}\" - scheduling retry in {} ms", getIdentifier(), shardName, failure, scheduleInterval); - getActorContext().getActorSystem().scheduler().scheduleOnce( + getActorUtils().getActorSystem().scheduler().scheduleOnce( FiniteDuration.create(scheduleInterval, TimeUnit.MILLISECONDS), - this::tryFindPrimaryShard, getActorContext().getClientDispatcher()); + this::tryFindPrimaryShard, getActorUtils().getClientDispatcher()); return; } @@ -234,14 +238,14 @@ final class RemoteTransactionContextSupport { private TransactionContext createValidTransactionContext(final CreateTransactionReply reply) { LOG.debug("Tx {} Received {}", getIdentifier(), reply); - return createValidTransactionContext(getActorContext().actorSelection(reply.getTransactionPath()), + return createValidTransactionContext(getActorUtils().actorSelection(reply.getTransactionPath()), reply.getTransactionPath(), primaryShardInfo.getPrimaryShardVersion()); } private TransactionContext createValidTransactionContext(final ActorSelection transactionActor, final String transactionPath, final short remoteTransactionVersion) { final TransactionContext ret = new RemoteTransactionContext(transactionContextWrapper.getIdentifier(), - transactionActor, getActorContext(), remoteTransactionVersion, transactionContextWrapper.getLimiter()); + transactionActor, getActorUtils(), remoteTransactionVersion, transactionContextWrapper.getLimiter()); if (parent.getType() == TransactionType.READ_ONLY) { TransactionContextCleanup.track(parent, ret);