docs: private static int[] allocateShardsToNodes(int numShards, int numNodes, List<Set<Integer>> weightPerServer) {
        int[] shardsPerServer = new int[numNodes];
        Iterator<Integer> cyclicNodeIterator = Stream.iterate(0, i -> (i + 1) % numNodes).iterator();
        while (numShards > 0) {
           int slot = cyclicNodeIterator.next();
           if (!weightPerServer.get(slot).isEmpty()) {
              shardsPerServer[slot]++;
              numShards--;
           }
        }
        return shardsPerServer;
     }