HBASE-27560 fix consistencyCheck did not report the hole on last region (#4950)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
(cherry picked from commit c1b9d8ba06
)
This commit is contained in:
parent
0382b348cb
commit
56ebf93870
|
@ -180,10 +180,10 @@ class ReportMakingVisitor implements MetaTableAccessor.CloseableVisitor {
|
||||||
addOverlap(this.highestEndKeyRegionInfo, ri);
|
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;
|
return ri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
|
||||||
import org.apache.hadoop.hbase.HConstants;
|
import org.apache.hadoop.hbase.HConstants;
|
||||||
import org.apache.hadoop.hbase.MetaTableAccessor;
|
import org.apache.hadoop.hbase.MetaTableAccessor;
|
||||||
import org.apache.hadoop.hbase.TableName;
|
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.Put;
|
||||||
import org.apache.hadoop.hbase.client.RegionInfo;
|
import org.apache.hadoop.hbase.client.RegionInfo;
|
||||||
import org.apache.hadoop.hbase.client.RegionInfoBuilder;
|
import org.apache.hadoop.hbase.client.RegionInfoBuilder;
|
||||||
|
@ -66,6 +67,8 @@ public class TestCatalogJanitorCluster {
|
||||||
private static final TableName T3 = TableName.valueOf("t3");
|
private static final TableName T3 = TableName.valueOf("t3");
|
||||||
private static final TableName T4 = TableName.valueOf("t4");
|
private static final TableName T4 = TableName.valueOf("t4");
|
||||||
private static final TableName T5 = TableName.valueOf("t5");
|
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
|
@Before
|
||||||
public void before() throws Exception {
|
public void before() throws Exception {
|
||||||
|
@ -82,6 +85,9 @@ public class TestCatalogJanitorCluster {
|
||||||
final byte[][] keysForT5 = { Bytes.toBytes("bb"), Bytes.toBytes("cc"), Bytes.toBytes("dd") };
|
final byte[][] keysForT5 = { Bytes.toBytes("bb"), Bytes.toBytes("cc"), Bytes.toBytes("dd") };
|
||||||
|
|
||||||
TEST_UTIL.createTable(T5, HConstants.CATALOG_FAMILY, keysForT5);
|
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
|
@After
|
||||||
|
@ -227,7 +233,7 @@ public class TestCatalogJanitorCluster {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHoles() throws IOException {
|
public void testHoles() throws IOException, InterruptedException {
|
||||||
CatalogJanitor janitor = TEST_UTIL.getHBaseCluster().getMaster().getCatalogJanitor();
|
CatalogJanitor janitor = TEST_UTIL.getHBaseCluster().getMaster().getCatalogJanitor();
|
||||||
|
|
||||||
CatalogJanitorReport report = janitor.getLastReport();
|
CatalogJanitorReport report = janitor.getLastReport();
|
||||||
|
@ -237,6 +243,9 @@ public class TestCatalogJanitorCluster {
|
||||||
verifyCornerHoles(janitor, T1);
|
verifyCornerHoles(janitor, T1);
|
||||||
// Verify start and end region holes
|
// Verify start and end region holes
|
||||||
verifyCornerHoles(janitor, T2);
|
verifyCornerHoles(janitor, T2);
|
||||||
|
// Verify start and end region holes when next table is disable see: HBASE-27560
|
||||||
|
disableTable(T7);
|
||||||
|
verifyCornerHoles(janitor, T6);
|
||||||
verifyMiddleHole(janitor);
|
verifyMiddleHole(janitor);
|
||||||
// Verify that MetaFixer is able to fix these holes
|
// Verify that MetaFixer is able to fix these holes
|
||||||
fixHoles(janitor);
|
fixHoles(janitor);
|
||||||
|
@ -246,8 +255,8 @@ public class TestCatalogJanitorCluster {
|
||||||
MetaFixer metaFixer = new MetaFixer(TEST_UTIL.getHBaseCluster().getMaster());
|
MetaFixer metaFixer = new MetaFixer(TEST_UTIL.getHBaseCluster().getMaster());
|
||||||
janitor.scan();
|
janitor.scan();
|
||||||
CatalogJanitorReport report = janitor.getLastReport();
|
CatalogJanitorReport report = janitor.getLastReport();
|
||||||
// Verify total number of holes, 2 in t1 and t2 each and one in t3
|
// Verify total number of holes, 2 in t1, t2, t6 each and one in t3
|
||||||
assertEquals("Number of holes are not matching", 5, report.getHoles().size());
|
assertEquals("Number of holes are not matching", 7, report.getHoles().size());
|
||||||
metaFixer.fix();
|
metaFixer.fix();
|
||||||
janitor.scan();
|
janitor.scan();
|
||||||
report = janitor.getLastReport();
|
report = janitor.getLastReport();
|
||||||
|
@ -320,4 +329,13 @@ public class TestCatalogJanitorCluster {
|
||||||
assertNotNull(regionInfo);
|
assertNotNull(regionInfo);
|
||||||
return 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.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue