From: Moiz Raja Date: Wed, 11 Nov 2015 00:05:28 +0000 (-0800) Subject: BUG 4615 : Add method on EOS to check if a candidate is registered locally X-Git-Tag: release/beryllium~168 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=cfecc809377e7221983b6edfb337372c66491729 BUG 4615 : Add method on EOS to check if a candidate is registered locally Change-Id: Iedb2e4cf92553910cf5e1bd85978f88e10bf3c25 Signed-off-by: Moiz Raja --- diff --git a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/clustering/EntityOwnershipService.java b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/clustering/EntityOwnershipService.java index 311d1b8595..a042bf5ef2 100644 --- a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/clustering/EntityOwnershipService.java +++ b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/clustering/EntityOwnershipService.java @@ -58,4 +58,12 @@ public interface EntityOwnershipService { * @return an Optional EntityOwnershipState whose instance is present if the entity is found */ Optional getOwnershipState(@Nonnull Entity forEntity); + + /** + * Check if a local candidate is registered for the given entity + * + * @param entity + * @return true if a candidate was registered locally, false otherwise + */ + boolean isCandidateRegistered(@Nonnull Entity entity); } 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 f1d9b43aba..ec0081d38b 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 @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; +import javax.annotation.Nonnull; import org.opendaylight.controller.cluster.datastore.DistributedDataStore; import org.opendaylight.controller.cluster.datastore.config.Configuration; import org.opendaylight.controller.cluster.datastore.config.ModuleShardConfiguration; @@ -192,6 +193,11 @@ public class DistributedEntityOwnershipService implements EntityOwnershipService return Optional.of(new EntityOwnershipState(isOwner, hasOwner)); } + @Override + public boolean isCandidateRegistered(@Nonnull Entity entity) { + return registeredEntities.get(entity) != null; + } + private DataTree getLocalEntityOwnershipShardDataTree() { if(localEntityOwnershipShardDataTree == null) { try { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipServiceTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipServiceTest.java index 084c5e79db..9608b812e4 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipServiceTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipServiceTest.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.cluster.datastore.entityownership; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; @@ -290,6 +291,30 @@ public class DistributedEntityOwnershipServiceTest extends AbstractEntityOwnersh service.close(); } + @Test + public void testIsCandidateRegistered() throws CandidateAlreadyRegisteredException { + final TestShardBuilder shardBuilder = new TestShardBuilder(); + DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore, + EntityOwnerSelectionStrategyConfig.newBuilder().build()) { + @Override + protected EntityOwnershipShard.Builder newShardBuilder() { + return shardBuilder; + } + }; + + service.start(); + + final Entity test = new Entity("test-type", "test"); + + assertFalse(service.isCandidateRegistered(test)); + + service.registerCandidate(test); + + assertTrue(service.isCandidateRegistered(test)); + + service.close(); + } + private static void verifyGetOwnershipState(DistributedEntityOwnershipService service, Entity entity, boolean isOwner, boolean hasOwner) { Optional state = service.getOwnershipState(entity);