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%2FMemberNode.java;h=de751beeb9d91a16dd3f013de2bfdb067d112a27;hb=70b924258e6c87219c38bcfefb3781ee3d2e2d02;hp=33be6bee023b445765aa6cfa3d93ca9f8abd56b9;hpb=09892e9e17d9bff10178b4631678557b855d8a1e;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java index 33be6bee02..de751beeb9 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java @@ -7,7 +7,7 @@ */ package org.opendaylight.controller.cluster.datastore; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import akka.actor.ActorRef; import akka.actor.ActorSystem; @@ -17,6 +17,7 @@ import akka.cluster.Cluster; import akka.cluster.ClusterEvent.CurrentClusterState; import akka.cluster.Member; import akka.cluster.MemberStatus; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; import com.google.common.collect.Sets; @@ -25,6 +26,7 @@ import com.typesafe.config.ConfigFactory; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; +import org.opendaylight.controller.cluster.access.concepts.MemberName; import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; import org.opendaylight.controller.cluster.datastore.utils.ActorContext; import org.opendaylight.controller.cluster.raft.client.messages.GetOnDemandRaftState; @@ -82,13 +84,21 @@ public class MemberNode { } public void waitForMembersUp(String... otherMembers) { - Set otherMembersSet = Sets.newHashSet(otherMembers); + kit.waitForMembersUp(otherMembers); + } + + public void waitForMemberDown(String member) { Stopwatch sw = Stopwatch.createStarted(); while(sw.elapsed(TimeUnit.SECONDS) <= 10) { CurrentClusterState state = Cluster.get(kit.getSystem()).state(); + for(Member m: state.getUnreachable()) { + if(member.equals(m.getRoles().iterator().next())) { + return; + } + } + for(Member m: state.getMembers()) { - if(m.status() == MemberStatus.up() && otherMembersSet.remove(m.getRoles().iterator().next()) && - otherMembersSet.isEmpty()) { + if(m.status() != MemberStatus.up() && member.equals(m.getRoles().iterator().next())) { return; } } @@ -96,15 +106,20 @@ public class MemberNode { Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); } - fail("Member(s) " + otherMembersSet + " are not Up"); + fail("Member " + member + " is now down"); } public void cleanup() { if(!cleanedUp) { cleanedUp = true; - kit.cleanup(configDataStore); - kit.cleanup(operDataStore); - kit.shutdownActorSystem(kit.getSystem(), Boolean.TRUE); + if (configDataStore != null) { + configDataStore.close(); + } + if (operDataStore != null) { + operDataStore.close(); + } + + IntegrationTestKit.shutdownActorSystem(kit.getSystem(), Boolean.TRUE); } } @@ -137,17 +152,26 @@ public class MemberNode { String... peerMemberNames) throws Exception { final Set peerIds = Sets.newHashSet(); for(String p: peerMemberNames) { - peerIds.add(ShardIdentifier.builder().memberName(p).shardName(shardName). - type(datastore.getActorContext().getDataStoreType()).build().toString()); + peerIds.add(ShardIdentifier.create(shardName, MemberName.forName(p), + datastore.getActorContext().getDataStoreName()).toString()); } - verifyRaftState(datastore, shardName, new RaftStateVerifier() { - @Override - public void verify(OnDemandRaftState raftState) { - assertTrue("Peer(s) " + peerIds + " not found for shard " + shardName, - raftState.getPeerAddresses().keySet().containsAll(peerIds)); + verifyRaftState(datastore, shardName, raftState -> assertEquals("Peers for shard " + shardName, peerIds, + raftState.getPeerAddresses().keySet())); + } + + public static void verifyNoShardPresent(DistributedDataStore datastore, String shardName) { + Stopwatch sw = Stopwatch.createStarted(); + while(sw.elapsed(TimeUnit.SECONDS) <= 5) { + Optional shardReply = datastore.getActorContext().findLocalShard(shardName); + if(!shardReply.isPresent()) { + return; } - }); + + Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS); + } + + fail("Shard " + shardName + " is present"); } public static class Builder { @@ -252,7 +276,7 @@ public class MemberNode { node.kit = new IntegrationTestKit(system, datastoreContextBuilder); - String memberName = new ClusterWrapperImpl(system).getCurrentMemberName(); + String memberName = new ClusterWrapperImpl(system).getCurrentMemberName().getName(); node.kit.getDatastoreContextBuilder().shardManagerPersistenceId("shard-manager-config-" + memberName); node.configDataStore = node.kit.setupDistributedDataStore("config_" + testName, moduleShardsConfig, true, schemaContext, waitForshardLeader);