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%2Fentityownership%2FCandidateListChangeListener.java;h=3b4f2d96471a296db82d01f4689c974a4dccb1fd;hb=a3cecfd01d0ef8922530924e3ee9684eb03ee5d6;hp=35100cb5b9a49d3e5c72be4d5c98fc7d3a0810ee;hpb=00e97ff87662959a39218b47bac904235003dc8d;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/CandidateListChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/CandidateListChangeListener.java index 35100cb5b9..3b4f2d9647 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/CandidateListChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/CandidateListChangeListener.java @@ -12,6 +12,7 @@ import static org.opendaylight.controller.cluster.datastore.entityownership.Enti import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_ID_QNAME; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_OWNERS_PATH; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_QNAME; + import akka.actor.ActorRef; import com.google.common.base.Preconditions; import java.util.ArrayList; @@ -44,26 +45,31 @@ import org.slf4j.LoggerFactory; * @author Moiz Raja * @author Thomas Pantelis */ -public class CandidateListChangeListener implements DOMDataTreeChangeListener { +class CandidateListChangeListener implements DOMDataTreeChangeListener { private static final Logger LOG = LoggerFactory.getLogger(CandidateListChangeListener.class); + private final String logId; private final ActorRef shard; private final Map> currentCandidates = new HashMap<>(); - public CandidateListChangeListener(ActorRef shard, ShardDataTree shardDataTree) { + CandidateListChangeListener(ActorRef shard, String logId) { this.shard = Preconditions.checkNotNull(shard, "shard should not be null"); + this.logId = logId; + } - shardDataTree.registerTreeChangeListener(YangInstanceIdentifier.builder(ENTITY_OWNERS_PATH). - node(EntityType.QNAME).node(EntityType.QNAME).node(ENTITY_QNAME).node(ENTITY_QNAME). - node(Candidate.QNAME).node(Candidate.QNAME).build(), this); + void init(ShardDataTree shardDataTree) { + shardDataTree.registerTreeChangeListener(YangInstanceIdentifier.builder(ENTITY_OWNERS_PATH) + .node(EntityType.QNAME).node(EntityType.QNAME).node(ENTITY_QNAME).node(ENTITY_QNAME) + .node(Candidate.QNAME).node(Candidate.QNAME).build(), this); } @Override public void onDataTreeChanged(Collection changes) { - for(DataTreeCandidate change: changes) { + for (DataTreeCandidate change: changes) { DataTreeCandidateNode changeRoot = change.getRootNode(); + ModificationType type = changeRoot.getModificationType(); - LOG.debug("Candidate node changed: {}, {}", changeRoot.getModificationType(), change.getRootPath()); + LOG.debug("{}: Candidate node changed: {}, {}", logId, type, change.getRootPath()); NodeIdentifierWithPredicates candidateKey = (NodeIdentifierWithPredicates) change.getRootPath().getLastPathArgument(); @@ -71,23 +77,23 @@ public class CandidateListChangeListener implements DOMDataTreeChangeListener { YangInstanceIdentifier entityId = extractEntityPath(change.getRootPath()); - if(changeRoot.getModificationType() == ModificationType.WRITE) { - LOG.debug("Candidate {} was added for entity {}", candidate, entityId); + if (type == ModificationType.WRITE || type == ModificationType.APPEARED) { + LOG.debug("{}: Candidate {} was added for entity {}", logId, candidate, entityId); - Collection currentCandidates = addToCurrentCandidates(entityId, candidate); - shard.tell(new CandidateAdded(entityId, candidate, new ArrayList<>(currentCandidates)), shard); - } else if(changeRoot.getModificationType() == ModificationType.DELETE) { - LOG.debug("Candidate {} was removed for entity {}", candidate, entityId); + Collection newCandidates = addToCurrentCandidates(entityId, candidate); + shard.tell(new CandidateAdded(entityId, candidate, new ArrayList<>(newCandidates)), shard); + } else if (type == ModificationType.DELETE || type == ModificationType.DISAPPEARED) { + LOG.debug("{}: Candidate {} was removed for entity {}", logId, candidate, entityId); - Collection currentCandidates = removeFromCurrentCandidates(entityId, candidate); - shard.tell(new CandidateRemoved(entityId, candidate, new ArrayList<>(currentCandidates)), shard); + Collection newCandidates = removeFromCurrentCandidates(entityId, candidate); + shard.tell(new CandidateRemoved(entityId, candidate, new ArrayList<>(newCandidates)), shard); } } } private Collection addToCurrentCandidates(YangInstanceIdentifier entityId, String newCandidate) { Collection candidates = currentCandidates.get(entityId); - if(candidates == null) { + if (candidates == null) { candidates = new LinkedHashSet<>(); currentCandidates.put(entityId, candidates); } @@ -98,7 +104,7 @@ public class CandidateListChangeListener implements DOMDataTreeChangeListener { private Collection removeFromCurrentCandidates(YangInstanceIdentifier entityId, String candidateToRemove) { Collection candidates = currentCandidates.get(entityId); - if(candidates != null) { + if (candidates != null) { candidates.remove(candidateToRemove); return candidates; } @@ -107,14 +113,14 @@ public class CandidateListChangeListener implements DOMDataTreeChangeListener { return Collections.emptyList(); } - private YangInstanceIdentifier extractEntityPath(YangInstanceIdentifier candidatePath) { + private static YangInstanceIdentifier extractEntityPath(YangInstanceIdentifier candidatePath) { List newPathArgs = new ArrayList<>(); - for(PathArgument pathArg: candidatePath.getPathArguments()) { + for (PathArgument pathArg: candidatePath.getPathArguments()) { newPathArgs.add(pathArg); - if(pathArg instanceof NodeIdentifierWithPredicates) { + if (pathArg instanceof NodeIdentifierWithPredicates) { NodeIdentifierWithPredicates nodeKey = (NodeIdentifierWithPredicates) pathArg; Entry key = nodeKey.getKeyValues().entrySet().iterator().next(); - if(ENTITY_ID_QNAME.equals(key.getKey())) { + if (ENTITY_ID_QNAME.equals(key.getKey())) { break; } } @@ -122,4 +128,4 @@ public class CandidateListChangeListener implements DOMDataTreeChangeListener { return YangInstanceIdentifier.create(newPathArgs); } -} \ No newline at end of file +}