private void verifyAssignment(List<List<ClusterNode>> assignment, int keyBackups, int partsCnt, int topSize) {
Map<UUID, Collection<Integer>> mapping = new HashMap<>();
int ideal = Math.round((float)partsCnt / topSize * Math.min(keyBackups + 1, topSize));
for (int part = 0; part < assignment.size(); part++) {
for (ClusterNode node : assignment.get(part)) {
assert node != null;
Collection<Integer> parts = mapping.get(node.id());
if (parts == null) {
parts = new HashSet<>();
mapping.put(node.id(), parts);
}
assertTrue(parts.add(part));
}
}
int max = -1, min = Integer.MAX_VALUE;
for (Collection<Integer> parts : mapping.values()) {
max = Math.max(max, parts.size());
min = Math.min(min, parts.size());
}
log().warning("max=" + max + ", min=" + min + ", ideal=" + ideal + ", minDev=" + deviation(min, ideal) + "%, " +
"maxDev=" + deviation(max, ideal) + "%");
}