X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2Factors%2Fdds%2FClientTransaction.java;h=7cdc04aba17b471ea218e3e8060141b9a8a2451e;hp=9b4c5a962f9b62959ffc3464b475c27a7d198b59;hb=refs%2Fchanges%2F49%2F85749%2F63;hpb=abaef4a5ae37f27542155457fe7306a4662b1eeb diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java index 9b4c5a962f..7cdc04aba1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java @@ -7,11 +7,12 @@ */ package org.opendaylight.controller.cluster.databroker.actors.dds; +import static com.google.common.base.Preconditions.checkState; + import com.google.common.annotations.Beta; -import com.google.common.base.Preconditions; -import com.google.common.collect.Iterables; import com.google.common.util.concurrent.FluentFuture; import java.util.Collection; +import java.util.Map; import java.util.Optional; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort; @@ -79,25 +80,30 @@ public class ClientTransaction extends AbstractClientHandle toReady = ensureClosed(); - Preconditions.checkState(toReady != null, "Attempted to submit a closed transaction %s", this); + final Map participants = ensureClosed(); + checkState(participants != null, "Attempted to submit a closed transaction %s", this); + final Collection toReady = participants.values(); toReady.forEach(AbstractProxyTransaction::seal); + + final TransactionIdentifier txId = getIdentifier(); + final AbstractClientHistory parent = parent(); + parent.onTransactionShardsBound(txId, participants.keySet()); + final AbstractTransactionCommitCohort cohort; switch (toReady.size()) { case 0: - cohort = new EmptyTransactionCommitCohort(parent(), getIdentifier()); + cohort = new EmptyTransactionCommitCohort(parent, txId); break; case 1: - cohort = new DirectTransactionCommitCohort(parent(), getIdentifier(), - Iterables.getOnlyElement(toReady)); + cohort = new DirectTransactionCommitCohort(parent, txId, toReady.iterator().next()); break; default: - cohort = new ClientTransactionCommitCohort(parent(), getIdentifier(), toReady); + cohort = new ClientTransactionCommitCohort(parent, txId, toReady); break; } - return parent().onTransactionReady(this, cohort); + return parent.onTransactionReady(this, cohort); } @Override