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%2FDataTreeCohortActorRegistry.java;h=572abeec7d1bdcf450421a7c4137fc82b60d09f5;hb=20a32e6459fd1e27e7669bf1ebc7742b96787b94;hp=fb3743d426d1ac4636db0d43b8cef37eb7094b27;hpb=a47dd7a5d21ca68804a6d0e2e3ca765f223c2ef4;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java index fb3743d426..572abeec7d 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java @@ -13,6 +13,8 @@ import akka.actor.PoisonPill; import akka.actor.Status; import akka.util.Timeout; import com.google.common.base.Preconditions; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -20,13 +22,12 @@ import java.util.List; import java.util.Map; import javax.annotation.concurrent.NotThreadSafe; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; -import org.opendaylight.controller.cluster.datastore.DataTreeCohortActor.CanCommit; -import org.opendaylight.controller.md.sal.dom.spi.AbstractRegistrationTree; -import org.opendaylight.controller.md.sal.dom.spi.RegistrationTreeNode; -import org.opendaylight.controller.md.sal.dom.spi.RegistrationTreeSnapshot; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; +import org.opendaylight.mdsal.dom.spi.AbstractRegistrationTree; +import org.opendaylight.mdsal.dom.spi.RegistrationTreeNode; +import org.opendaylight.mdsal.dom.spi.RegistrationTreeSnapshot; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; @@ -48,7 +49,11 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { private final Map> cohortToNode = new HashMap<>(); + Collection getCohortActors() { + return new ArrayList<>(cohortToNode.keySet()); + } + @SuppressWarnings("checkstyle:IllegalCatch") void registerCohort(final ActorRef sender, final RegisterCohort cohort) { takeLock(); try { @@ -77,7 +82,7 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { cohort.tell(PoisonPill.getInstance(), cohort); } - Collection createCanCommitMessages(final TransactionIdentifier txId, + List createCanCommitMessages(final TransactionIdentifier txId, final DataTreeCandidate candidate, final SchemaContext schema) { try (RegistrationTreeSnapshot cohorts = takeSnapshot()) { return new CanCommitMessageBuilder(txId, candidate, schema).perform(cohorts.getRootNode()); @@ -92,7 +97,7 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { } } - static abstract class CohortRegistryCommand { + abstract static class CohortRegistryCommand { private final ActorRef cohort; @@ -134,10 +139,10 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { private final TransactionIdentifier txId; private final DataTreeCandidate candidate; private final SchemaContext schema; - private final Collection messages = - new ArrayList<>(); + private final Multimap actorToCandidates = ArrayListMultimap.create(); - CanCommitMessageBuilder(final TransactionIdentifier txId, final DataTreeCandidate candidate, final SchemaContext schema) { + CanCommitMessageBuilder(final TransactionIdentifier txId, final DataTreeCandidate candidate, + final SchemaContext schema) { this.txId = Preconditions.checkNotNull(txId); this.candidate = Preconditions.checkNotNull(candidate); this.schema = schema; @@ -160,8 +165,8 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { } } - private void lookupAndCreateCanCommits(final YangInstanceIdentifier path, final RegistrationTreeNode regNode, - final DataTreeCandidateNode candNode) { + private void lookupAndCreateCanCommits(final YangInstanceIdentifier path, + final RegistrationTreeNode regNode, final DataTreeCandidateNode candNode) { if (candNode.getModificationType() == ModificationType.UNMODIFIED) { LOG.debug("Skipping unmodified candidate {}", path); return; @@ -189,10 +194,9 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { private void createCanCommits(final Collection regs, final YangInstanceIdentifier path, final DataTreeCandidateNode node) { - final DOMDataTreeCandidate candidate = DOMDataTreeCandidateTO.create(treeIdentifier(path), node); + final DOMDataTreeCandidate domCandidate = DOMDataTreeCandidateTO.create(treeIdentifier(path), node); for (final ActorRef reg : regs) { - final CanCommit message = new DataTreeCohortActor.CanCommit(txId, candidate, schema, reg); - messages.add(message); + actorToCandidates.put(reg, domCandidate); } } @@ -200,9 +204,16 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { return new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, path); } - private Collection perform(final RegistrationTreeNode rootNode) { + List perform(final RegistrationTreeNode rootNode) { final List toLookup = candidate.getRootPath().getPathArguments(); lookupAndCreateCanCommits(toLookup, 0, rootNode); + + final Map> mapView = actorToCandidates.asMap(); + final List messages = new ArrayList<>(mapView.size()); + for (Map.Entry> entry: mapView.entrySet()) { + messages.add(new DataTreeCohortActor.CanCommit(txId, entry.getValue(), schema, entry.getKey())); + } + return messages; } }