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%2FAbstractTransactionContextFactory.java;h=b5afd596bf3b1ded0abdbaceb9c80e309ccaacda;hb=bfb38b42aa055a2478a5972f15ca4246dee796e9;hp=d8dda25cc78d524d0ed7241500dbff50de9f669b;hpb=3e80db38f7f579505173c29c42f800983d7ca6c1;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractTransactionContextFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractTransactionContextFactory.java index d8dda25cc7..b5afd596bf 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractTransactionContextFactory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractTransactionContextFactory.java @@ -9,14 +9,16 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorSelection; import akka.dispatch.OnComplete; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.Collection; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicLongFieldUpdater; import javax.annotation.Nonnull; -import org.opendaylight.controller.cluster.datastore.identifiers.TransactionIdentifier; +import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier; +import org.opendaylight.controller.cluster.access.concepts.MemberName; +import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.messages.PrimaryShardInfo; import org.opendaylight.controller.cluster.datastore.utils.ActorContext; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction; @@ -34,27 +36,37 @@ import scala.util.Try; */ abstract class AbstractTransactionContextFactory implements AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(AbstractTransactionContextFactory.class); - - protected static final AtomicLong TX_COUNTER = new AtomicLong(); + @SuppressWarnings("rawtypes") + private static final AtomicLongFieldUpdater TX_COUNTER_UPDATER = + AtomicLongFieldUpdater.newUpdater(AbstractTransactionContextFactory.class, "nextTx"); private final ConcurrentMap knownLocal = new ConcurrentHashMap<>(); + private final LocalHistoryIdentifier historyId; private final ActorContext actorContext; - protected AbstractTransactionContextFactory(final ActorContext actorContext) { + // Used via TX_COUNTER_UPDATER + @SuppressWarnings("unused") + private volatile long nextTx; + + protected AbstractTransactionContextFactory(final ActorContext actorContext, + final LocalHistoryIdentifier historyId) { this.actorContext = Preconditions.checkNotNull(actorContext); + this.historyId = Preconditions.checkNotNull(historyId); } final ActorContext getActorContext() { return actorContext; } + final LocalHistoryIdentifier getHistoryId() { + return historyId; + } + private TransactionContext maybeCreateLocalTransactionContext(final TransactionProxy parent, final String shardName) { final LocalTransactionFactory local = knownLocal.get(shardName); if (local != null) { - if(LOG.isDebugEnabled()) { - LOG.debug("Tx {} - Creating local component for shard {} using factory {}", - parent.getIdentifier(), shardName, local); - } + LOG.debug("Tx {} - Creating local component for shard {} using factory {}", parent.getIdentifier(), + shardName, local); try { return createLocalTransactionContext(local, parent); @@ -145,13 +157,8 @@ abstract class AbstractTransactionContextFactory