in src/main/java/com/uber/rss/clients/ServerReplicationGroupUtil.java [37:66]
public static List<ServerReplicationGroup> createReplicationGroups(Collection<ServerDetail> servers, int numReplicas) {
if (servers.isEmpty()) {
throw new IllegalArgumentException("Invalid argument: servers is empty");
}
if (numReplicas <= 0) {
throw new IllegalArgumentException(String.format("Invalid argument: numReplicas: %s", numReplicas));
}
if (servers.size() < numReplicas) {
throw new RssInvalidStateException(String.format("Lack of enough servers (%s) to support %s replicas", servers.size(), numReplicas));
}
List<ServerDetail> serverList = new ArrayList<>(servers);
List<ServerReplicationGroup> result = new ArrayList<>(servers.size());
for (int i = 0; i < servers.size(); i+=numReplicas) {
// do not use remaining servers if they are not enough for the replicas
if (servers.size() - i < numReplicas) {
continue;
}
List<ServerDetail> serverGroup = new ArrayList<>();
for (int j = 0; j < numReplicas; j++) {
serverGroup.add(serverList.get((i + j) % servers.size()));
}
result.add(new ServerReplicationGroup(serverGroup));
}
return result;
}