*/
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;
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;
}
public void waitForMembersUp(String... otherMembers) {
- Set<String> 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;
}
}
Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS);
}
- fail("Member(s) " + otherMembersSet + " are not Up");
+ fail("Member " + member + " is now down");
}
public void cleanup() {
final Set<String> peerIds = Sets.newHashSet();
for(String p: peerMemberNames) {
peerIds.add(ShardIdentifier.builder().memberName(p).shardName(shardName).
- type(datastore.getActorContext().getDataStoreType()).build().toString());
+ type(datastore.getActorContext().getDataStoreName()).build().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));
+ 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<ActorRef> shardReply = datastore.getActorContext().findLocalShard(shardName);
+ if(!shardReply.isPresent()) {
+ return;
+ }
+
+ Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS);
+ }
+
+ fail("Shard " + shardName + " is present");
+ }
+
public static class Builder {
private final List<MemberNode> members;
private String moduleShardsConfig;