protected TreeMap<ServerName, List<RegionInfo>> mockClusterServers(int[][] mockCluster) {
    // dimension1: table, dimension2: regions per server
    int numTables = mockCluster.length;
    TreeMap<ServerName, List<RegionInfo>> servers = new TreeMap<>();
    for (int i = 0; i < numTables; i++) {
      TableName tableName = TableName.valueOf("table" + i);
      for (int j = 0; j < mockCluster[i].length; j++) {
        ServerName serverName = ServerName.valueOf("server" + j, 1000, -1);
        int numRegions = mockCluster[i][j];
        List<RegionInfo> regions = createRegions(numRegions, tableName);
        servers.putIfAbsent(serverName, new ArrayList<>());
        servers.get(serverName).addAll(regions);
      }
    }
    return servers;
  }
This assumes the RegionPlan HSI instances are the same ones in the map, so actually no need to
even pass in the map, but I think it's clearer.
@return a list of all added {@link ServerAndLoad} values.
hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java