From 9867288d06f99492d60d516e92d18482629b0842 Mon Sep 17 00:00:00 2001 From: Jingyun Tian Date: Wed, 20 Mar 2019 15:21:40 +0800 Subject: [PATCH] HBASE-22049 RegionStateStore cannot recover SPLIT state from Meta for split parent region --- .../hadoop/hbase/MetaTableAccessor.java | 1 + .../TestSplitTableRegionProcedure.java | 23 +++++++++++++++++++ 2 files changed, 24 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..499320bc46 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,26 @@ 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