in tephra-hbase-compat-2.4/src/main/java/org/apache/tephra/hbase/txprune/InvalidListPruningDebugTool.java [174:227]
public SortedSet<RegionPruneInfoPretty> getIdleRegions(Integer numRegions, String time) throws IOException {
List<RegionPruneInfo> regionPruneInfos = dataJanitorState.getPruneInfoForRegions(null);
if (regionPruneInfos.isEmpty()) {
return new TreeSet<>();
}
// Create a set with region names
Set<String> pruneRegionNameSet = new HashSet<>();
for (RegionPruneInfo regionPruneInfo : regionPruneInfos) {
pruneRegionNameSet.add(regionPruneInfo.getRegionNameAsString());
}
// Fetch the latest live regions
RegionsAtTime latestRegions = getRegionsOnOrBeforeTime(NOW);
// Fetch the regions at the given time
RegionsAtTime timeRegions = getRegionsOnOrBeforeTime(time);
Set<String> liveRegions = Sets.intersection(latestRegions.getRegions(), timeRegions.getRegions());
Set<String> liveRegionsWithPruneInfo = Sets.intersection(liveRegions, pruneRegionNameSet);
List<RegionPruneInfo> liveRegionWithPruneInfoList = new ArrayList<>();
for (RegionPruneInfo regionPruneInfo : regionPruneInfos) {
if (liveRegionsWithPruneInfo.contains(regionPruneInfo.getRegionNameAsString())) {
liveRegionWithPruneInfoList.add(regionPruneInfo);
}
// Use the subset of live regions and prune regions
regionPruneInfos = liveRegionWithPruneInfoList;
}
if (numRegions < 0) {
numRegions = regionPruneInfos.size();
}
Comparator<RegionPruneInfo> comparator = new Comparator<RegionPruneInfo>() {
@Override
public int compare(RegionPruneInfo o1, RegionPruneInfo o2) {
int result = Long.compare(o1.getPruneUpperBound(), o2.getPruneUpperBound());
if (result == 0) {
return o1.getRegionNameAsString().compareTo(o2.getRegionNameAsString());
}
return result;
}
};
MinMaxPriorityQueue<RegionPruneInfoPretty> lowestPrunes =
MinMaxPriorityQueue.orderedBy(comparator).maximumSize(numRegions).create();
for (RegionPruneInfo pruneInfo : regionPruneInfos) {
lowestPrunes.add(new RegionPruneInfoPretty(pruneInfo));
}
SortedSet<RegionPruneInfoPretty> regions = new TreeSet<>(comparator);
regions.addAll(lowestPrunes);
return regions;
}