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%2Fdatastore%2Fentityownership%2FDistributedEntityOwnershipService.java;h=a2a63f42293372b67a9bd10d2062fd3b6dffe155;hp=0277271020c2bd91b21a12f6481e2b8d8082624c;hb=4f2123238f32ad97019ad0ce0a7b588ea33397ed;hpb=09892e9e17d9bff10178b4631678557b855d8a1e diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java index 0277271020..a2a63f4229 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.cluster.datastore.entityownership; +import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.CANDIDATE_NODE_ID; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_OWNER_NODE_ID; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.entityPath; import akka.actor.ActorRef; @@ -44,6 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll 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.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.slf4j.Logger; @@ -173,19 +175,26 @@ public class DistributedEntityOwnershipService implements EntityOwnershipService Preconditions.checkNotNull(forEntity, "forEntity cannot be null"); DataTree dataTree = getLocalEntityOwnershipShardDataTree(); - if(dataTree == null) { + if (dataTree == null) { return Optional.absent(); } Optional> entityNode = dataTree.takeSnapshot().readNode( entityPath(forEntity.getType(), forEntity.getId())); - if(!entityNode.isPresent()) { + if (!entityNode.isPresent()) { + return Optional.absent(); + } + + // Check if there are any candidates, if there are none we do not really have ownership state + final MapEntryNode entity = (MapEntryNode) entityNode.get(); + final Optional> optionalCandidates = entity.getChild(CANDIDATE_NODE_ID); + final boolean hasCandidates = optionalCandidates.isPresent() && ((MapNode) optionalCandidates.get()).getValue().size() > 0; + if(!hasCandidates){ return Optional.absent(); } String localMemberName = datastore.getActorContext().getCurrentMemberName(); - Optional> ownerLeaf = ((MapEntryNode)entityNode.get()). - getChild(ENTITY_OWNER_NODE_ID); + Optional> ownerLeaf = entity.getChild(ENTITY_OWNER_NODE_ID); String owner = ownerLeaf.isPresent() ? ownerLeaf.get().getValue().toString() : null; boolean hasOwner = !Strings.isNullOrEmpty(owner); boolean isOwner = hasOwner && localMemberName.equals(owner);