in src/main/java/org/apache/accumulo/testing/merkle/MerkleTree.java [67:96]
protected Pair<Integer,Integer> findNextPair(List<MerkleTreeNode> nodes) {
int i = 0, j = 1;
while (i < nodes.size() && j < nodes.size()) {
MerkleTreeNode left = nodes.get(i), right = nodes.get(j);
// At the same level
if (left.getLevel() == right.getLevel()) {
return new Pair<>(i, j);
}
// Peek to see if we have another element
if (j + 1 < nodes.size()) {
// If we do, try to match those
i++;
j++;
} else {
// Otherwise, the last two elements must be paired
return new Pair<>(i, j);
}
}
if (2 < nodes.size()) {
throw new IllegalStateException(
"Should not have exited loop without pairing two elements when we have at least 3 nodes");
} else if (2 == nodes.size()) {
return new Pair<>(0, 1);
} else {
throw new IllegalStateException("Must have at least two nodes to pair");
}
}