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%2FEntityOwnerChangeListener.java;h=d10bc2158ae9824a5f6946d62d055da27895f35e;hb=e04c7f93b0b614580c45318585f7709192465757;hp=253761fcb4a8d7a105a18aaf0885eef92a8f500d;hpb=00e97ff87662959a39218b47bac904235003dc8d;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnerChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnerChangeListener.java index 253761fcb4..d10bc2158a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnerChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnerChangeListener.java @@ -7,27 +7,15 @@ */ package org.opendaylight.controller.cluster.datastore.entityownership; -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_OWNER_NODE_ID; -import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_QNAME; -import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_TYPE_QNAME; +import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.createEntity; import com.google.common.base.Objects; import com.google.common.base.Optional; import java.util.Collection; -import java.util.Map.Entry; -import org.opendaylight.controller.cluster.datastore.ShardDataTree; import org.opendaylight.controller.md.sal.common.api.clustering.Entity; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.clustering.entity.owners.rev150804.entity.owners.EntityType; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; -import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +24,7 @@ import org.slf4j.LoggerFactory; * * @author Thomas Pantelis */ -class EntityOwnerChangeListener implements DOMDataTreeChangeListener { +class EntityOwnerChangeListener extends AbstractEntityOwnerChangeListener { private static final Logger LOG = LoggerFactory.getLogger(EntityOwnerChangeListener.class); private final String localMemberName; @@ -47,62 +35,40 @@ class EntityOwnerChangeListener implements DOMDataTreeChangeListener { this.listenerSupport = listenerSupport; } - void init(ShardDataTree shardDataTree) { - shardDataTree.registerTreeChangeListener(YangInstanceIdentifier.builder(ENTITY_OWNERS_PATH). - node(EntityType.QNAME).node(EntityType.QNAME).node(ENTITY_QNAME).node(ENTITY_QNAME).build(), this); - } - @Override public void onDataTreeChanged(Collection changes) { for(DataTreeCandidate change: changes) { - MapEntryNode entityNode = (MapEntryNode) change.getRootNode().getDataAfter().get(); + DataTreeCandidateNode changeRoot = change.getRootNode(); + LeafNode ownerLeaf = (LeafNode) changeRoot.getDataAfter().get(); - LOG.debug("Entity node updated: {}", change.getRootPath()); + LOG.debug("{}: Entity node changed: {}, {}", logId(), changeRoot.getModificationType(), change.getRootPath()); - String newOwner = extractOwner(entityNode); + String newOwner = extractOwner(ownerLeaf); String origOwner = null; - Optional> dataBefore = change.getRootNode().getDataBefore(); + Optional> dataBefore = changeRoot.getDataBefore(); if(dataBefore.isPresent()) { - MapEntryNode origEntityNode = (MapEntryNode) change.getRootNode().getDataBefore().get(); - origOwner = extractOwner(origEntityNode); + origOwner = extractOwner((LeafNode) changeRoot.getDataBefore().get()); } - LOG.debug("New owner: {}, Original owner: {}", newOwner, origOwner); + LOG.debug("{}: New owner: {}, Original owner: {}", logId(), newOwner, origOwner); - boolean isOwner = Objects.equal(localMemberName, newOwner); - boolean wasOwner = Objects.equal(localMemberName, origOwner); - if(isOwner || wasOwner) { - Entity entity = createEntity(change.getRootPath()); + if(!Objects.equal(origOwner, newOwner)) { + boolean isOwner = Objects.equal(localMemberName, newOwner); + boolean wasOwner = Objects.equal(localMemberName, origOwner); + boolean hasOwner = newOwner != null && !newOwner.toString().isEmpty(); - LOG.debug("Calling notifyEntityOwnershipListeners: entity: {}, wasOwner: {}, isOwner: {}", - entity, wasOwner, isOwner); + Entity entity = createEntity(change.getRootPath()); - listenerSupport.notifyEntityOwnershipListeners(entity, wasOwner, isOwner); - } - } - } + LOG.debug("{}: Calling notifyEntityOwnershipListeners: entity: {}, wasOwner: {}, isOwner: {}, hasOwner: {}", + logId(), entity, wasOwner, isOwner, hasOwner); - private Entity createEntity(YangInstanceIdentifier entityPath) { - String entityType = null; - YangInstanceIdentifier entityId = null; - for(PathArgument pathArg: entityPath.getPathArguments()) { - if(pathArg instanceof NodeIdentifierWithPredicates) { - NodeIdentifierWithPredicates nodeKey = (NodeIdentifierWithPredicates) pathArg; - Entry key = nodeKey.getKeyValues().entrySet().iterator().next(); - if(ENTITY_TYPE_QNAME.equals(key.getKey())) { - entityType = key.getValue().toString(); - } else if(ENTITY_ID_QNAME.equals(key.getKey())) { - entityId = (YangInstanceIdentifier) key.getValue(); - } + listenerSupport.notifyEntityOwnershipListeners(entity, wasOwner, isOwner, hasOwner); } } - - return new Entity(entityType, entityId); } - private String extractOwner(MapEntryNode entityNode) { - Optional> ownerNode = entityNode.getChild(ENTITY_OWNER_NODE_ID); - return ownerNode.isPresent() ? (String) ownerNode.get().getValue() : null; + private String logId() { + return listenerSupport.getLogId(); } }