cluster runner now support adding slaves

pull/838/head
Rui Gu 8 years ago
parent 5d4d66c83e
commit e29636e17a

@ -17,9 +17,10 @@ import java.util.List;
public class ClusterRunner {
private final LinkedHashMap<RedisRunner, String> nodes = new LinkedHashMap<>();
private final LinkedHashMap<String, String> masters = new LinkedHashMap<>();
public ClusterRunner addNode(RedisRunner runner) {
nodes.put(runner, getRandomId());
nodes.putIfAbsent(runner, getRandomId());
if (!runner.hasOption(RedisRunner.REDIS_OPTIONS.CLUSTER_ENABLED)) {
runner.clusterEnabled(true);
}
@ -36,11 +37,20 @@ public class ClusterRunner {
return this;
}
public ClusterRunner addNode(RedisRunner master, RedisRunner... slaves) {
addNode(master);
for (RedisRunner slave : slaves) {
addNode(slave);
masters.put(nodes.get(slave), nodes.get(master));
}
return this;
}
public List<RedisRunner.RedisProcess> run() throws IOException, InterruptedException, RedisRunner.FailedToStartRedisException {
ArrayList<RedisRunner.RedisProcess> processes = new ArrayList<>();
for (RedisRunner runner : nodes.keySet()) {
List<String> options = getClusterConfig(runner);
String confFile = runner.defaultDir() + File.pathSeparator + nodes.get(runner) + ".conf";
String confFile = runner.dir() + File.separatorChar + nodes.get(runner) + ".conf";
System.out.println("WRITING CONFIG: for " + nodes.get(runner));
try (PrintWriter printer = new PrintWriter(new FileWriter(confFile))) {
options.stream().forEach((line) -> {
@ -64,13 +74,20 @@ public class ClusterRunner {
List<String> nodeConfig = new ArrayList<>();
int c = 0;
for (RedisRunner node : nodes.keySet()) {
String nodeId = nodes.get(node);
StringBuilder sb = new StringBuilder();
String nodeAddr = node.getInitialBindAddr() + ":" + node.getPort();
sb.append(nodes.get(node)).append(" ");
sb.append(nodeId).append(" ");
sb.append(nodeAddr).append(" ");
sb.append(me.equals(nodeAddr)
? "myself,"
: "").append("master -").append(" ");
: "");
if (!masters.containsKey(nodeId)) {
sb.append("master -");
} else {
sb.append("slave ").append(masters.get(nodeId));
}
sb.append(" ");
sb.append("0").append(" ");
sb.append(me.equals(nodeAddr)
? "0"

@ -191,6 +191,7 @@ public class RedisRunner {
protected static RedisRunner.RedisProcess defaultRedisInstance;
private static int defaultRedisInstanceExitCode;
private String path = "";
private String defaultDir = Paths.get("").toString();
private boolean nosave = false;
private boolean randomDir = false;
@ -459,6 +460,7 @@ public class RedisRunner {
public RedisRunner dir(String dir) {
if (!randomDir) {
addConfigOption(REDIS_OPTIONS.DIR, dir);
this.path = dir;
}
return this;
}
@ -824,6 +826,10 @@ public class RedisRunner {
public String defaultDir() {
return this.defaultDir;
}
public String dir() {
return this.path;
}
public String getInitialBindAddr() {
return bindAddr.size() > 0 ? bindAddr.get(0) : "localhost";

Loading…
Cancel
Save