X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fentityownership%2FDistributedEntityOwnershipIntegrationTest.java;h=6273e13dff49fd5e3c42987f08848b6cb07f632e;hb=2d60632f7cf63712e8357a3cf3fc40d83366e5e6;hp=4855baec6ac7a802f7d6309950bba996237aae96;hpb=56af1b2a45b4a567813de5314c31aaf26a2e4052;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipIntegrationTest.java index 4855baec6a..6273e13dff 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipIntegrationTest.java @@ -52,7 +52,6 @@ import org.opendaylight.controller.cluster.datastore.IntegrationTestKit; import org.opendaylight.controller.cluster.datastore.MemberNode; import org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.EntityOwnerSelectionStrategyConfig; import org.opendaylight.controller.cluster.datastore.messages.AddShardReplica; -import org.opendaylight.controller.cluster.raft.RaftState; import org.opendaylight.controller.cluster.raft.policy.DisableElectionsRaftPolicy; import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal; import org.opendaylight.controller.cluster.raft.utils.InMemorySnapshotStore; @@ -292,6 +291,8 @@ public class DistributedEntityOwnershipIntegrationTest { follower1Node.configDataStore().waitTillReady(); follower2Node.configDataStore().waitTillReady(); + follower1Node.waitForMembersUp("member-1", "member-3"); + final DOMEntityOwnershipService leaderEntityOwnershipService = newOwnershipService(leaderDistributedDataStore); final DOMEntityOwnershipService follower1EntityOwnershipService = newOwnershipService(follower1Node.configDataStore()); @@ -322,20 +323,23 @@ public class DistributedEntityOwnershipIntegrationTest { verifyCandidates(leaderDistributedDataStore, ENTITY2, "member-1", "member-3"); verifyOwner(leaderDistributedDataStore, ENTITY2, "member-1"); - // Shutdown the leader and verify its removed from the candidate list - - leaderNode.cleanup(); - follower1Node.waitForMemberDown("member-1"); - - // Re-enable elections on follower1 so it becomes the leader + // Re-enable elections on all remaining followers so one becomes the new leader ActorRef follower1Shard = IntegrationTestKit.findLocalShard(follower1Node.configDataStore().getActorContext(), ENTITY_OWNERSHIP_SHARD_NAME); follower1Shard.tell(DatastoreContext.newBuilderFrom(followerDatastoreContextBuilder.build()) .customRaftPolicyImplementation(null).build(), ActorRef.noSender()); - MemberNode.verifyRaftState(follower1Node.configDataStore(), ENTITY_OWNERSHIP_SHARD_NAME, - raftState -> assertEquals("Raft state", RaftState.Leader.toString(), raftState.getRaftState())); + ActorRef follower2Shard = IntegrationTestKit.findLocalShard(follower2Node.configDataStore().getActorContext(), + ENTITY_OWNERSHIP_SHARD_NAME); + follower2Shard.tell(DatastoreContext.newBuilderFrom(followerDatastoreContextBuilder.build()) + .customRaftPolicyImplementation(null).build(), ActorRef.noSender()); + + // Shutdown the leader and verify its removed from the candidate list + + leaderNode.cleanup(); + follower1Node.waitForMemberDown("member-1"); + follower2Node.waitForMemberDown("member-1"); // Verify the prior leader's entity owners are re-assigned. @@ -381,6 +385,11 @@ public class DistributedEntityOwnershipIntegrationTest { leaderDistributedDataStore.waitTillReady(); follower1Node.configDataStore().waitTillReady(); follower2Node.configDataStore().waitTillReady(); + follower3Node.configDataStore().waitTillReady(); + follower4Node.configDataStore().waitTillReady(); + + leaderNode.waitForMembersUp("member-2", "member-3", "member-4", "member-5"); + follower1Node.waitForMembersUp("member-1", "member-3", "member-4", "member-5"); final DOMEntityOwnershipService leaderEntityOwnershipService = newOwnershipService(leaderDistributedDataStore); final DOMEntityOwnershipService follower1EntityOwnershipService = @@ -421,6 +430,23 @@ public class DistributedEntityOwnershipIntegrationTest { verifyCandidates(leaderDistributedDataStore, ENTITY2, "member-1", "member-3", "member-4"); verifyOwner(leaderDistributedDataStore, ENTITY2, "member-1"); + // Re-enable elections on all remaining followers so one becomes the new leader + + ActorRef follower1Shard = IntegrationTestKit.findLocalShard(follower1Node.configDataStore().getActorContext(), + ENTITY_OWNERSHIP_SHARD_NAME); + follower1Shard.tell(DatastoreContext.newBuilderFrom(followerDatastoreContextBuilder.build()) + .customRaftPolicyImplementation(null).build(), ActorRef.noSender()); + + ActorRef follower2Shard = IntegrationTestKit.findLocalShard(follower2Node.configDataStore().getActorContext(), + ENTITY_OWNERSHIP_SHARD_NAME); + follower2Shard.tell(DatastoreContext.newBuilderFrom(followerDatastoreContextBuilder.build()) + .customRaftPolicyImplementation(null).build(), ActorRef.noSender()); + + ActorRef follower4Shard = IntegrationTestKit.findLocalShard(follower4Node.configDataStore().getActorContext(), + ENTITY_OWNERSHIP_SHARD_NAME); + follower4Shard.tell(DatastoreContext.newBuilderFrom(followerDatastoreContextBuilder.build()) + .customRaftPolicyImplementation(null).build(), ActorRef.noSender()); + // Shutdown the leader and follower3 leaderNode.cleanup(); @@ -428,16 +454,10 @@ public class DistributedEntityOwnershipIntegrationTest { follower1Node.waitForMemberDown("member-1"); follower1Node.waitForMemberDown("member-4"); - - // Re-enable elections on follower1 so it becomes the leader - - ActorRef follower1Shard = IntegrationTestKit.findLocalShard(follower1Node.configDataStore().getActorContext(), - ENTITY_OWNERSHIP_SHARD_NAME); - follower1Shard.tell(DatastoreContext.newBuilderFrom(followerDatastoreContextBuilder.build()) - .customRaftPolicyImplementation(null).build(), ActorRef.noSender()); - - MemberNode.verifyRaftState(follower1Node.configDataStore(), ENTITY_OWNERSHIP_SHARD_NAME, - raftState -> assertEquals("Raft state", RaftState.Leader.toString(), raftState.getRaftState())); + follower2Node.waitForMemberDown("member-1"); + follower2Node.waitForMemberDown("member-4"); + follower4Node.waitForMemberDown("member-1"); + follower4Node.waitForMemberDown("member-4"); // Verify the prior leader's and follower3 entity owners are re-assigned.