From 9f292bb1b22e7afda167ec2f15e75a2ce90dd7f7 Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Fri, 14 Aug 2015 06:13:54 -0400 Subject: [PATCH] Bug 4105: Integrate EntityOwnerChangeListener with EntityOwnershipShard Change-Id: Ia302d503f9ff65aa48faf7d69f1405ebf5267166 Signed-off-by: Tom Pantelis --- .../entityownership/CandidateListChangeListener.java | 6 ++++-- .../entityownership/EntityOwnershipShard.java | 7 +++++-- .../CandidateListChangeListenerTest.java | 2 +- .../entityownership/EntityOwnershipShardTest.java | 10 ++++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) 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..82f926aea9 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 @@ -44,15 +44,17 @@ 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 ActorRef shard; private final Map> currentCandidates = new HashMap<>(); - public CandidateListChangeListener(ActorRef shard, ShardDataTree shardDataTree) { + CandidateListChangeListener(ActorRef shard) { this.shard = Preconditions.checkNotNull(shard, "shard should not be null"); + } + 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); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java index 629f9382a1..175e854269 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java @@ -45,6 +45,7 @@ import scala.concurrent.Future; class EntityOwnershipShard extends Shard { private final String localMemberName; private final EntityOwnershipShardCommitCoordinator commitCoordinator; + private final EntityOwnershipListenerSupport listenerSupport; private static DatastoreContext noPersistenceDatastoreContext(DatastoreContext datastoreContext) { return DatastoreContext.newBuilderFrom(datastoreContext).persistent(false).build(); @@ -55,6 +56,7 @@ class EntityOwnershipShard extends Shard { super(name, peerAddresses, noPersistenceDatastoreContext(datastoreContext), schemaContext); this.localMemberName = localMemberName; this.commitCoordinator = new EntityOwnershipShardCommitCoordinator(localMemberName, LOG); + this.listenerSupport = new EntityOwnershipListenerSupport(getContext()); } @Override @@ -66,7 +68,8 @@ class EntityOwnershipShard extends Shard { protected void onRecoveryComplete() { super.onRecoveryComplete(); - new CandidateListChangeListener(getSelf(), getDataStore()); + new CandidateListChangeListener(getSelf()).init(getDataStore()); + new EntityOwnerChangeListener(localMemberName, listenerSupport).init(getDataStore()); } @Override @@ -87,7 +90,7 @@ class EntityOwnershipShard extends Shard { private void onRegisterCandidateLocal(RegisterCandidateLocal registerCandidate) { LOG.debug("onRegisterCandidateLocal: {}", registerCandidate); - // TODO - add the listener locally. + listenerSupport.addEntityOwnershipListener(registerCandidate.getEntity(), registerCandidate.getCandidate()); NormalizedNode entityOwners = entityOwnersWithCandidate(registerCandidate.getEntity().getType(), registerCandidate.getEntity().getId(), localMemberName); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/CandidateListChangeListenerTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/CandidateListChangeListenerTest.java index 149d5f432a..aa96fc20d8 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/CandidateListChangeListenerTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/CandidateListChangeListenerTest.java @@ -45,7 +45,7 @@ public class CandidateListChangeListenerTest extends AbstractActorTest { public void testOnDataTreeChanged() throws Exception { JavaTestKit kit = new JavaTestKit(getSystem()); - CandidateListChangeListener listener = new CandidateListChangeListener(kit.getRef(), shardDataTree); + new CandidateListChangeListener(kit.getRef()).init(shardDataTree); String memberName1 = "member-1"; writeNode(ENTITY_OWNERS_PATH, entityOwnersWithCandidate(ENTITY_TYPE, ENTITY_ID1, memberName1)); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShardTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShardTest.java index a6bf30c01e..49953ac143 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShardTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShardTest.java @@ -9,6 +9,8 @@ package org.opendaylight.controller.cluster.datastore.entityownership; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_OWNERS_PATH; import akka.actor.ActorRef; import akka.actor.Props; @@ -98,6 +100,8 @@ public class EntityOwnershipShardTest extends AbstractEntityOwnershipTest { verifyCommittedEntityCandidate(shard, ENTITY_TYPE, entityId, LOCAL_MEMBER_NAME); verifyOwner(shard, ENTITY_TYPE, entityId, LOCAL_MEMBER_NAME); + + verify(candidate, timeout(5000)).ownershipChanged(entity, false, true); } @Test @@ -127,6 +131,8 @@ public class EntityOwnershipShardTest extends AbstractEntityOwnershipTest { verifyCommittedEntityCandidate(shard, ENTITY_TYPE, entityId, LOCAL_MEMBER_NAME); verifyOwner(shard, ENTITY_TYPE, entityId, LOCAL_MEMBER_NAME); + + verify(candidate, timeout(5000)).ownershipChanged(entity, false, true); } @Test @@ -169,6 +175,8 @@ public class EntityOwnershipShardTest extends AbstractEntityOwnershipTest { verifyCommittedEntityCandidate(shard, ENTITY_TYPE, entityId, LOCAL_MEMBER_NAME); verifyOwner(shard, ENTITY_TYPE, entityId, LOCAL_MEMBER_NAME); + + verify(candidate, timeout(5000)).ownershipChanged(entity, false, true); } @Test @@ -207,6 +215,8 @@ public class EntityOwnershipShardTest extends AbstractEntityOwnershipTest { verifyCommittedEntityCandidate(shard, ENTITY_TYPE, entityId, LOCAL_MEMBER_NAME); verifyOwner(shard, ENTITY_TYPE, entityId, LOCAL_MEMBER_NAME); + + verify(candidate, timeout(5000)).ownershipChanged(entity, false, true); } @Test -- 2.36.6