public static List createReplicationGroups()

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;
  }