X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2Factors%2Fdds%2FDistributedDataStoreClientBehavior.java;h=eb1dd17bfd9438fc6adff5351db71527d90b3453;hb=refs%2Fchanges%2F99%2F47499%2F3;hp=5aca99ae591003d920f4f48d369700bae936ac53;hpb=98d1c5606bad9633ce5549bcd691a98c75abdf6a;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/DistributedDataStoreClientBehavior.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/DistributedDataStoreClientBehavior.java index 5aca99ae59..eb1dd17bfd 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/DistributedDataStoreClientBehavior.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/DistributedDataStoreClientBehavior.java @@ -15,12 +15,12 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; +import org.opendaylight.controller.cluster.access.client.ClientActorBehavior; +import org.opendaylight.controller.cluster.access.client.ClientActorContext; import org.opendaylight.controller.cluster.access.commands.TransactionRequest; import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier; import org.opendaylight.controller.cluster.access.concepts.Response; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; -import org.opendaylight.controller.cluster.datastore.actors.client.ClientActorBehavior; -import org.opendaylight.controller.cluster.datastore.actors.client.ClientActorContext; import org.opendaylight.controller.cluster.datastore.utils.ActorContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,21 +29,26 @@ import org.slf4j.LoggerFactory; * {@link ClientActorBehavior} acting as an intermediary between the backend actors and the DistributedDataStore * frontend. * + *

* This class is not visible outside of this package because it breaks the actor containment. Services provided to * Java world outside of actor containment are captured in {@link DistributedDataStoreClient}. * + *

* IMPORTANT: this class breaks actor containment via methods implementing {@link DistributedDataStoreClient} contract. * When touching internal state, be mindful of the execution context from which execution context, Actor * or POJO, is the state being accessed or modified. * + *

* THREAD SAFETY: this class must always be kept thread-safe, so that both the Actor System thread and the application * threads can run concurrently. All state transitions must be made in a thread-safe manner. When in * doubt, feel free to synchronize on this object. * + *

* PERFORMANCE: this class lies in a performance-critical fast path. All code needs to be concise and efficient, but * performance must not come at the price of correctness. Any optimizations need to be carefully analyzed * for correctness and performance impact. * + *

* TRADE-OFFS: part of the functionality runs in application threads without switching contexts, which makes it ideal * for performing work and charging applications for it. That has two positive effects: * - CPU usage is distributed across applications, minimizing work done in the actor thread @@ -65,7 +70,7 @@ final class DistributedDataStoreClientBehavior extends ClientActorBehavior imple DistributedDataStoreClientBehavior(final ClientActorContext context, final ActorContext actorContext) { super(context); - resolver = new ModuleShardBackendResolver(actorContext); + resolver = new ModuleShardBackendResolver(context.getIdentifier(), actorContext); singleHistory = new SingleClientHistory(this, new LocalHistoryIdentifier(getIdentifier(), 0)); } @@ -123,6 +128,7 @@ final class DistributedDataStoreClientBehavior extends ClientActorBehavior imple // // + @SuppressWarnings("checkstyle:IllegalCatch") private static V returnIfOperational(final Map map, final K key, final V value, final Throwable aborted) { Verify.verify(map.put(key, value) == null); @@ -154,7 +160,7 @@ final class DistributedDataStoreClientBehavior extends ClientActorBehavior imple public ClientTransaction createTransaction() { final TransactionIdentifier txId = new TransactionIdentifier(singleHistory.getIdentifier(), nextTransactionId.getAndIncrement()); - final ClientTransaction tx = new ClientTransaction(this, singleHistory, txId); + final ClientTransaction tx = new ClientTransaction(singleHistory, txId); LOG.debug("{}: creating a new transaction {}", persistenceId(), tx); return returnIfOperational(transactions, txId, tx, aborted); @@ -174,8 +180,8 @@ final class DistributedDataStoreClientBehavior extends ClientActorBehavior imple transactions.remove(transaction.getIdentifier()); } - void sendRequest(final long sequence, final TransactionRequest request, final Consumer> completer) { - sendRequest(sequence, request, response -> { + void sendRequest(final TransactionRequest request, final Consumer> completer) { + sendRequest(request, response -> { completer.accept(response); return this; });