From 9f0fec3cd0e29683961c5ccf8a657add73465e5c Mon Sep 17 00:00:00 2001 From: Jingyun Tian Date: Fri, 22 Mar 2019 10:17:55 +0800 Subject: [PATCH] HBASE-22049 RegionStateStore cannot recover SPLIT state from Meta for split parent region --- .../hadoop/hbase/MetaTableAccessor.java | 1 + .../TestSplitTableRegionProcedure.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java index 22256df3a0..cb7cee6f4f 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java @@ -1656,6 +1656,7 @@ public class MetaTableAccessor { Put putParent = makePutFromRegionInfo(RegionInfoBuilder.newBuilder(parent) .setOffline(true) .setSplit(true).build(), time); + addRegionStateToPut(putParent, State.SPLIT); addDaughtersToPut(putParent, splitA, splitB); // Puts for daughters diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java index 3f9f960b92..6419f0a2f6 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java @@ -30,6 +30,7 @@ import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HConstants; +import org.apache.hadoop.hbase.MetaTableAccessor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.Waiter; import org.apache.hadoop.hbase.client.CompactionState; @@ -40,6 +41,7 @@ import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.client.TableDescriptor; +import org.apache.hadoop.hbase.master.RegionState; import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants; import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv; import org.apache.hadoop.hbase.master.procedure.MasterProcedureTestingUtility; @@ -52,6 +54,7 @@ import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.util.Bytes; import org.junit.After; import org.junit.AfterClass; +import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; @@ -452,6 +455,29 @@ public class TestSplitTableRegionProcedure { verify(tableName, splitRowNum); } + @Test + public void testSplitRegionStateConsistency() throws Exception { + final TableName tableName = TableName.valueOf(name.getMethodName()); + final ProcedureExecutor procExec = getMasterProcedureExecutor(); + + RegionInfo[] regions = MasterProcedureTestingUtility.createTable(procExec, tableName, null, + ColumnFamilyName1, ColumnFamilyName2); + insertData(tableName); + RegionInfo parentRegion = regions[0]; + Result metaResult = + MetaTableAccessor.getRegionResult(UTIL.getConnection(), parentRegion.getRegionName()); + Assert.assertEquals(RegionState.State.OPEN, RegionStateStore.getRegionState(metaResult, 0)); + int splitRowNum = startRowNum + rowCount / 2; + byte[] splitKey = Bytes.toBytes("" + splitRowNum); + long procId = procExec.submitProcedure( + new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], splitKey)); + ProcedureTestingUtility + .waitProcedure(UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor(), procId); + metaResult = + MetaTableAccessor.getRegionResult(UTIL.getConnection(), parentRegion.getRegionName()); + Assert.assertEquals(RegionState.State.SPLIT, RegionStateStore.getRegionState(metaResult, 0)); + } + private void insertData(final TableName tableName) throws IOException, InterruptedException { Table t = UTIL.getConnection().getTable(tableName); Put p; -- 2.17.1