Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HBASE-27560 fix consistencyCheck did not report the hole on last region #4950

Merged
merged 2 commits into from
Jan 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -181,10 +181,10 @@ private RegionInfo metaTableConsistencyCheck(Result metaTableRow) {
addOverlap(this.highestEndKeyRegionInfo, ri);
}
}
this.previous = ri;
this.highestEndKeyRegionInfo =
MetaFixer.getRegionInfoWithLargestEndKey(this.highestEndKeyRegionInfo, ri);
}
this.previous = ri;
this.highestEndKeyRegionInfo =
MetaFixer.getRegionInfoWithLargestEndKey(this.highestEndKeyRegionInfo, ri);
return ri;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.MetaTableAccessor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.TableNotEnabledException;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.RegionInfo;
import org.apache.hadoop.hbase.client.RegionInfoBuilder;
Expand Down Expand Up @@ -68,6 +69,8 @@ public class TestCatalogJanitorCluster {
private static final TableName T3 = TableName.valueOf("t3");
private static final TableName T4 = TableName.valueOf("t4");
private static final TableName T5 = TableName.valueOf("t5");
private static final TableName T6 = TableName.valueOf("t6");
private static final TableName T7 = TableName.valueOf("t7");

@Before
public void before() throws Exception {
Expand All @@ -84,6 +87,9 @@ public void before() throws Exception {
final byte[][] keysForT5 = { Bytes.toBytes("bb"), Bytes.toBytes("cc"), Bytes.toBytes("dd") };

TEST_UTIL.createTable(T5, HConstants.CATALOG_FAMILY, keysForT5);

TEST_UTIL.createMultiRegionTable(T6, new byte[][] { HConstants.CATALOG_FAMILY });
TEST_UTIL.createMultiRegionTable(T7, new byte[][] { HConstants.CATALOG_FAMILY });
}

@After
Expand Down Expand Up @@ -231,7 +237,7 @@ private static byte[] incrementRow(byte[] row) {
}

@Test
public void testHoles() throws IOException {
public void testHoles() throws IOException, InterruptedException {
CatalogJanitor janitor = TEST_UTIL.getHBaseCluster().getMaster().getCatalogJanitor();

CatalogJanitorReport report = janitor.getLastReport();
Expand All @@ -241,6 +247,9 @@ public void testHoles() throws IOException {
verifyCornerHoles(janitor, T1);
// Verify start and end region holes
verifyCornerHoles(janitor, T2);
// Verify start and end region holes when next table is disable see: HBASE-27560
disableTable(T7);
verifyCornerHoles(janitor, T6);
verifyMiddleHole(janitor);
// Verify that MetaFixer is able to fix these holes
fixHoles(janitor);
Expand All @@ -250,8 +259,8 @@ private void fixHoles(CatalogJanitor janitor) throws IOException {
MetaFixer metaFixer = new MetaFixer(TEST_UTIL.getHBaseCluster().getMaster());
janitor.scan();
CatalogJanitorReport report = janitor.getLastReport();
// Verify total number of holes, 2 in t1 and t2 each and one in t3
assertEquals("Number of holes are not matching", 5, report.getHoles().size());
// Verify total number of holes, 2 in t1, t2, t6 each and one in t3
assertEquals("Number of holes are not matching", 7, report.getHoles().size());
metaFixer.fix();
janitor.scan();
report = janitor.getLastReport();
Expand Down Expand Up @@ -327,4 +336,13 @@ private RegionInfo getRegionInfo(TableName tableName, byte[] row) throws IOExcep
assertNotNull(regionInfo);
return regionInfo;
}

private void disableTable(TableName tableName) throws IOException, InterruptedException {
try {
TEST_UTIL.getAdmin().disableTable(tableName);
TEST_UTIL.waitTableDisabled(tableName, 30000);
} catch (TableNotEnabledException e) {
LOG.debug("Table: " + tableName + " already disabled, ignore.");
}
}
}