in hbase-tools/src/main/java/org/apache/hbase/RegionsMerger.java [134:161]
private boolean canMerge(Path path, RegionInfo region1, RegionInfo region2,
Collection<Pair<RegionInfo, RegionInfo>> alreadyMerging) throws IOException {
if(alreadyMerging.stream().anyMatch(regionPair ->
region1.equals(regionPair.getFirst()) ||
region2.equals(regionPair.getFirst()) ||
region1.equals(regionPair.getSecond()) ||
region2.equals(regionPair.getSecond()))){
return false;
}
if (RegionInfo.areAdjacent(region1, region2)) {
long size1 = sumSizeInFS(new Path(path, region1.getEncodedName()));
long size2 = sumSizeInFS(new Path(path, region2.getEncodedName()));
boolean mergeable = (resultSizeThreshold > (size1 + size2));
if (!mergeable) {
LOG.warn("Not merging regions {} and {} because resulting region size would get close to " +
"the {} limit. {} total size: {}; {} total size:{}", region1.getEncodedName(),
region2.getEncodedName(), resultSizeThreshold, region1.getEncodedName(), size1,
region2.getEncodedName(), size2);
}
return mergeable;
} else {
LOG.warn(
"WARNING: Can't merge regions {} and {} because those are not adjacent.",
region1.getEncodedName(),
region2.getEncodedName());
return false;
}
}