added ClusterRunner.ClusterProcesses

pull/856/head
Rui Gu 8 years ago
parent 1f09f262bf
commit aaf3166aed

@ -9,6 +9,10 @@ import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.redisson.misc.BiHashMap;
/**
*
@ -46,8 +50,8 @@ public class ClusterRunner {
return this;
}
public List<RedisRunner.RedisProcess> run() throws IOException, InterruptedException, RedisRunner.FailedToStartRedisException {
ArrayList<RedisRunner.RedisProcess> processes = new ArrayList<>();
public synchronized ClusterProcesses run() throws IOException, InterruptedException, RedisRunner.FailedToStartRedisException {
BiHashMap<String, RedisRunner.RedisProcess> processes = new BiHashMap<>();
for (RedisRunner runner : nodes.keySet()) {
List<String> options = getClusterConfig(runner);
String confFile = runner.dir() + File.separator + nodes.get(runner) + ".conf";
@ -58,15 +62,15 @@ public class ClusterRunner {
System.out.println(line);
});
}
processes.add(runner.clusterConfigFile(confFile).run());
processes.put(nodes.get(runner), runner.clusterConfigFile(confFile).run());
}
Thread.sleep(1000);
for (RedisRunner.RedisProcess process : processes) {
for (RedisRunner.RedisProcess process : processes.valueSet()) {
if (!process.isAlive()) {
throw new RedisRunner.FailedToStartRedisException();
}
}
return processes;
return new ClusterProcesses(processes);
}
private List<String> getClusterConfig(RedisRunner runner) {
@ -94,8 +98,10 @@ public class ClusterRunner {
: "1").append(" ");
sb.append(c + 1).append(" ");
sb.append("connected ");
sb.append(getSlots(c, nodes.size()));
c++;
if (!slaveMasters.containsKey(nodeId)) {
sb.append(getSlots(c, nodes.size() - slaveMasters.size()));
c++;
}
nodeConfig.add(sb.toString());
}
nodeConfig.add("vars currentEpoch 0 lastVoteEpoch 0");
@ -113,4 +119,37 @@ public class ClusterRunner {
final SecureRandom r = new SecureRandom();
return new BigInteger(160, r).toString(16);
}
public static class ClusterProcesses {
private final BiHashMap<String, RedisRunner.RedisProcess> processes;
private ClusterProcesses(BiHashMap<String, RedisRunner.RedisProcess> processes) {
this.processes = processes;
}
public RedisRunner.RedisProcess getProcess(String nodeId) {
return processes.get(nodeId);
}
public String getNodeId(RedisRunner.RedisProcess process) {
return processes.reverseGet(process);
}
public Set<RedisRunner.RedisProcess> getNodes() {
return processes.valueSet();
}
public Set<String> getNodeIds() {
return processes.keySet();
}
public synchronized Map<String, Integer> shutdown() {
return processes
.entrySet()
.stream()
.collect(Collectors.toMap(
e -> e.getKey(),
e -> e.getValue().stop()));
}
}
}

@ -1,6 +1,8 @@
package org.redisson.spring.support;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.*;
@ -124,14 +126,24 @@ public class SpringNamespaceTest extends BaseTest {
RedisRunner.getDefaultRedisServerInstance().getRedisServerPort(),
2).run();
System.setProperty("sentinel3Address", sentinel3.getRedisServerAddressAndPort());
RedisRunner slave = new RedisRunner().randomPort().randomDir().nosave();
ClusterRunner clusterRunner = new ClusterRunner()
.addNode(new RedisRunner().randomPort().randomDir().nosave())
.addNode(new RedisRunner().randomPort().randomDir().nosave())
.addNode(new RedisRunner().randomPort().randomDir().nosave());
List<RedisRunner.RedisProcess> nodes = clusterRunner.run();
nodes.stream().forEach((node) -> {
System.setProperty("node" + (nodes.indexOf(node) + 1) + "Address", node.getRedisServerAddressAndPort());
.addNode(new RedisRunner().randomPort().randomDir().nosave(),//master1
new RedisRunner().randomPort().randomDir().nosave(),//slave1-1
new RedisRunner().randomPort().randomDir().nosave(),//slave1-2
slave)//slave1-3
.addNode(new RedisRunner().randomPort().randomDir().nosave(),//master2
new RedisRunner().randomPort().randomDir().nosave(),//slave2-1
new RedisRunner().randomPort().randomDir().nosave())//slave2-2
.addNode(new RedisRunner().randomPort().randomDir().nosave(),//master3
new RedisRunner().randomPort().randomDir().nosave(),//slave3-1
new RedisRunner().randomPort().randomDir().nosave())//slave3-2
.addNode(slave,//slave1-3
new RedisRunner().randomPort().randomDir().nosave(),//slave1-3-1
new RedisRunner().randomPort().randomDir().nosave());//slave1-3-2
final AtomicLong index = new AtomicLong(0);
clusterRunner.run().getNodes().stream().forEach((node) -> {
System.setProperty("node" + (index.incrementAndGet()) + "Address", node.getRedisServerAddressAndPort());
});
context = new ClassPathXmlApplicationContext("classpath:org/redisson/spring/support/namespace.xml");

@ -180,16 +180,14 @@ public class SpringNamespaceWikiTest {
.port(6381)
.randomDir()
.nosave());
List<RedisRunner.RedisProcess> nodes = clusterRunner.run();
ClusterRunner.ClusterProcesses cluster = clusterRunner.run();
try {
((ConfigurableApplicationContext)
new ClassPathXmlApplicationContext("classpath:org/redisson/spring/support/namespace_wiki_cluster.xml"))
.close();
} finally {
for (RedisRunner.RedisProcess node : nodes) {
node.stop();
}
cluster.shutdown();
}
}
}

Loading…
Cancel
Save