Skip to content

Commit 2940b74

Browse files
SaadASTheDevwchevreuil
authored andcommitted
HBASE-30299 SimpleRegionNormalizer should not attempt to merge primary and secondary replicas (#8498)
Signed-off-by: Charles Connell <cconnell@apache.org> Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
1 parent dbd46bb commit 2940b74

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,8 @@ public NormalizeContext(final TableDescriptor tableDescriptor) {
649649
regionStates =
650650
SimpleRegionNormalizer.this.masterServices.getAssignmentManager().getRegionStates();
651651
tableRegions = regionStates.getRegionsOfTable(tableName);
652+
653+
tableRegions.removeIf(r -> r.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID);
652654
// The list of regionInfo from getRegionsOfTable() is ordered by regionName.
653655
// regionName does not necessary guarantee the order by STARTKEY (let's say 'aa1', 'aa1!',
654656
// in order by regionName, it will be 'aa1!' followed by 'aa1').

hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,4 +750,27 @@ private static Map<byte[], Integer> createRegionSizesMap(final List<RegionInfo>
750750
}
751751
return ret;
752752
}
753+
754+
@Test
755+
public void testIgnoresSecondaryReplicasForMergeAndSplitPlanning() {
756+
conf.setBoolean(SPLIT_ENABLED_KEY, true);
757+
conf.setBoolean(MERGE_ENABLED_KEY, true);
758+
conf.setInt(MERGE_MIN_REGION_COUNT_KEY, 1);
759+
conf.setInt(MERGE_MIN_REGION_SIZE_MB_KEY, 0);
760+
761+
final List<RegionInfo> primaryRegions = createRegionInfos(tableName, 5);
762+
final List<RegionInfo> allRegions = new ArrayList<>(primaryRegions);
763+
for (RegionInfo primary : primaryRegions) {
764+
allRegions.add(RegionInfoBuilder.newBuilder(tableName).setStartKey(primary.getStartKey())
765+
.setEndKey(primary.getEndKey()).setRegionId(primary.getRegionId()).setReplicaId(1).build());
766+
}
767+
768+
final Map<byte[], Integer> regionSizes = createRegionSizesMap(primaryRegions, 15, 5, 5, 15, 16);
769+
setupMocksForNormalizer(regionSizes, allRegions);
770+
771+
final List<NormalizationPlan> plans = normalizer.computePlansForTable(tableDescriptor);
772+
assertThat(plans, hasSize(1));
773+
assertThat(plans, contains(new MergeNormalizationPlan.Builder()
774+
.addTarget(primaryRegions.get(1), 5).addTarget(primaryRegions.get(2), 5).build()));
775+
}
753776
}

0 commit comments

Comments
 (0)