Skip to content

Commit 419cd1d

Browse files
infraiosaintstack
authored andcommitted
HBASE-23014 Should not show split parent regions in hbck report UI (apache#609)
1 parent cfd740b commit 419cd1d

5 files changed

Lines changed: 36 additions & 9 deletions

File tree

hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionInfo.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -802,11 +802,11 @@ default boolean isOverlap(RegionInfo other) {
802802
}
803803
int startKeyCompare = Bytes.compareTo(getStartKey(), other.getStartKey());
804804
if (startKeyCompare == 0) {
805-
return !this.isSplitParent();
805+
return true;
806806
}
807807
if (startKeyCompare < 0) {
808808
if (isLast()) {
809-
return !this.isSplitParent();
809+
return true;
810810
}
811811
return Bytes.compareTo(getEndKey(), other.getStartKey()) > 0;
812812
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,10 @@ private RegionInfo metaTableConsistencyCheck(Result metaTableRow) {
617617
Bytes.toStringBinary(metaTableRow.getRow()), ri.getRegionNameAsString());
618618
return null;
619619
}
620+
// Skip split parent region
621+
if (ri.isSplitParent()) {
622+
return ri;
623+
}
620624
// If table is disabled, skip integrity check.
621625
if (!isTableDisabled(ri)) {
622626
if (isTableTransition(ri)) {

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public class HbckChore extends ScheduledChore {
6262
private final Map<String, HbckRegionInfo> regionInfoMap = new HashMap<>();
6363

6464
private final Set<String> disabledTableRegions = new HashSet<>();
65+
private final Set<String> splitParentRegions = new HashSet<>();
6566

6667
/**
6768
* The regions only opened on RegionServers, but no region info in meta.
@@ -124,6 +125,7 @@ protected synchronized void chore() {
124125
running = true;
125126
regionInfoMap.clear();
126127
disabledTableRegions.clear();
128+
splitParentRegions.clear();
127129
orphanRegionsOnRS.clear();
128130
orphanRegionsOnFS.clear();
129131
inconsistentRegions.clear();
@@ -190,6 +192,9 @@ private void loadRegionsFromInMemoryState() {
190192
.isTableState(regionInfo.getTable(), TableState.State.DISABLED)) {
191193
disabledTableRegions.add(regionInfo.getEncodedName());
192194
}
195+
if (regionInfo.isSplitParent()) {
196+
splitParentRegions.add(regionInfo.getEncodedName());
197+
}
193198
HbckRegionInfo.MetaEntry metaEntry =
194199
new HbckRegionInfo.MetaEntry(regionInfo, regionState.getServerName(),
195200
regionState.getStamp());
@@ -222,11 +227,14 @@ private void loadRegionsFromRSReport() {
222227
HbckRegionInfo hri = entry.getValue();
223228
ServerName locationInMeta = hri.getMetaEntry().getRegionServer();
224229
if (hri.getDeployedOn().size() == 0) {
225-
// Because the inconsistent regions are not absolutely right, only skip the offline regions
226-
// which belong to disabled table.
230+
// skip the offline region which belong to disabled table.
227231
if (disabledTableRegions.contains(encodedRegionName)) {
228232
continue;
229233
}
234+
// skip the split parent regions
235+
if (splitParentRegions.contains(encodedRegionName)) {
236+
continue;
237+
}
230238
// Master thought this region opened, but no regionserver reported it.
231239
inconsistentRegions.put(encodedRegionName, new Pair<>(locationInMeta, new LinkedList<>()));
232240
} else if (hri.getDeployedOn().size() > 1) {

hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.apache.hadoop.hbase.regionserver.HRegion;
4040
import org.apache.hadoop.hbase.testclassification.MasterTests;
4141
import org.apache.hadoop.hbase.testclassification.MediumTests;
42+
import org.apache.hadoop.hbase.util.Bytes;
4243
import org.apache.hadoop.hbase.util.FSUtils;
4344
import org.apache.hadoop.hbase.util.Pair;
4445
import org.junit.Before;
@@ -180,6 +181,25 @@ public void testForDisabledTable() throws Exception {
180181
assertFalse(inconsistentRegions.containsKey(regionName));
181182
}
182183

184+
@Test
185+
public void testForSplitParent() throws Exception {
186+
TableName tableName = TableName.valueOf("testForSplitParent");
187+
RegionInfo hri = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(0))
188+
.setEndKey(Bytes.toBytes(1)).setSplit(true).setOffline(true).setRegionId(0).build();
189+
String regionName = hri.getEncodedName();
190+
rsDispatcher.setMockRsExecutor(new GoodRsExecutor());
191+
Future<byte[]> future = submitProcedure(createAssignProcedure(hri));
192+
waitOnFuture(future);
193+
194+
List<ServerName> serverNames = master.getServerManager().getOnlineServersList();
195+
assertEquals(NSERVERS, serverNames.size());
196+
197+
hbckChore.choreForTesting();
198+
Map<String, Pair<ServerName, List<ServerName>>> inconsistentRegions =
199+
hbckChore.getInconsistentRegions();
200+
assertFalse(inconsistentRegions.containsKey(regionName));
201+
}
202+
183203
@Test
184204
public void testOrphanRegionsOnFS() throws Exception {
185205
TableName tableName = TableName.valueOf("testOrphanRegionsOnFS");

hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionInfo.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,6 @@ public void testIsOverlap() {
129129
assertFalse(dri.isOverlap(ari));
130130
assertTrue(abri.isOverlap(adri));
131131
assertTrue(adri.isOverlap(abri));
132-
// Check that splitParent is not reported as an overlap.
133-
RegionInfo splitParent = RegionInfoBuilder.newBuilder(adri.getTable()).
134-
setStartKey(adri.getStartKey()).setEndKey(adri.getEndKey()).setOffline(true).
135-
setSplit(true).build();
136-
assertFalse(splitParent.isOverlap(abri));
137132
}
138133

139134
@Test

0 commit comments

Comments
 (0)