http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java ---------------------------------------------------------------------- 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 deleted file mode 100644 index 6824597..0000000 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java +++ /dev/null @@ -1,428 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.hbase.master.assignment; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.io.IOException; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.CategoryBasedTimeout; -import org.apache.hadoop.hbase.Cell; -import org.apache.hadoop.hbase.CellUtil; -import org.apache.hadoop.hbase.DoNotRetryIOException; -import org.apache.hadoop.hbase.HBaseTestingUtility; -import org.apache.hadoop.hbase.HConstants; -import org.apache.hadoop.hbase.HRegionInfo; -import org.apache.hadoop.hbase.HTableDescriptor; -import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.Waiter; -import org.apache.hadoop.hbase.client.CompactionState; -import org.apache.hadoop.hbase.client.Delete; -import org.apache.hadoop.hbase.client.Get; -import org.apache.hadoop.hbase.client.Put; -import org.apache.hadoop.hbase.client.Result; -import org.apache.hadoop.hbase.client.Table; -import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv; -import org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure; -import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants; -import org.apache.hadoop.hbase.master.procedure.MasterProcedureTestingUtility; -import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; -import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; -import org.apache.hadoop.hbase.regionserver.HRegion; -import org.apache.hadoop.hbase.testclassification.MasterTests; -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.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.rules.TestName; -import org.junit.rules.TestRule; - -@Category({MasterTests.class, MediumTests.class}) -public class TestSplitTableRegionProcedure { - private static final Log LOG = LogFactory.getLog(TestSplitTableRegionProcedure.class); - @Rule public final TestRule timeout = CategoryBasedTimeout.builder(). - withTimeout(this.getClass()).withLookingForStuckThread(true).build(); - - protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility(); - - private static String ColumnFamilyName1 = "cf1"; - private static String ColumnFamilyName2 = "cf2"; - - private static final int startRowNum = 11; - private static final int rowCount = 60; - - @Rule - public TestName name = new TestName(); - - private static void setupConf(Configuration conf) { - conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1); - conf.setLong(HConstants.MAJOR_COMPACTION_PERIOD, 0); - } - - @BeforeClass - public static void setupCluster() throws Exception { - setupConf(UTIL.getConfiguration()); - UTIL.startMiniCluster(3); - } - - @AfterClass - public static void cleanupTest() throws Exception { - try { - UTIL.shutdownMiniCluster(); - } catch (Exception e) { - LOG.warn("failure shutting down cluster", e); - } - } - - @Before - public void setup() throws Exception { - ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(getMasterProcedureExecutor(), false); - - // Turn off balancer so it doesn't cut in and mess up our placements. - UTIL.getAdmin().setBalancerRunning(false, true); - // Turn off the meta scanner so it don't remove parent on us. - UTIL.getHBaseCluster().getMaster().setCatalogJanitorEnabled(false); - } - - @After - public void tearDown() throws Exception { - ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(getMasterProcedureExecutor(), false); - for (HTableDescriptor htd: UTIL.getAdmin().listTables()) { - UTIL.deleteTable(htd.getTableName()); - } - } - - @Test(timeout=60000) - public void testSplitTableRegion() throws Exception { - final TableName tableName = TableName.valueOf(name.getMethodName()); - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - HRegionInfo [] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, ColumnFamilyName1, ColumnFamilyName2); - insertData(tableName); - int splitRowNum = startRowNum + rowCount / 2; - byte[] splitKey = Bytes.toBytes("" + splitRowNum); - - assertTrue("not able to find a splittable region", regions != null); - assertTrue("not able to find a splittable region", regions.length == 1); - - // Split region of the table - long procId = procExec.submitProcedure( - new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], splitKey)); - // Wait the completion - ProcedureTestingUtility.waitProcedure(procExec, procId); - ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - - verify(tableName, splitRowNum); - } - - @Test - public void testSplitTableRegionNoStoreFile() throws Exception { - final TableName tableName = TableName.valueOf(name.getMethodName()); - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - HRegionInfo [] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, ColumnFamilyName1, ColumnFamilyName2); - int splitRowNum = startRowNum + rowCount / 2; - byte[] splitKey = Bytes.toBytes("" + splitRowNum); - - assertTrue("not able to find a splittable region", regions != null); - assertTrue("not able to find a splittable region", regions.length == 1); - - // Split region of the table - long procId = procExec.submitProcedure( - new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], splitKey)); - // Wait the completion - ProcedureTestingUtility.waitProcedure(procExec, procId); - ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - - assertTrue(UTIL.getMiniHBaseCluster().getRegions(tableName).size() == 2); - assertTrue(UTIL.countRows(tableName) == 0); - } - - @Test - public void testSplitTableRegionUnevenDaughter() throws Exception { - final TableName tableName = TableName.valueOf(name.getMethodName()); - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - HRegionInfo [] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, ColumnFamilyName1, ColumnFamilyName2); - insertData(tableName); - // Split to two daughters with one of them only has 1 row - int splitRowNum = startRowNum + rowCount / 4; - byte[] splitKey = Bytes.toBytes("" + splitRowNum); - - assertTrue("not able to find a splittable region", regions != null); - assertTrue("not able to find a splittable region", regions.length == 1); - - // Split region of the table - long procId = procExec.submitProcedure( - new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], splitKey)); - // Wait the completion - ProcedureTestingUtility.waitProcedure(procExec, procId); - ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - - verify(tableName, splitRowNum); - } - - @Test - public void testSplitTableRegionEmptyDaughter() throws Exception { - final TableName tableName = TableName.valueOf(name.getMethodName()); - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - HRegionInfo [] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, ColumnFamilyName1, ColumnFamilyName2); - insertData(tableName); - // Split to two daughters with one of them only has 1 row - int splitRowNum = startRowNum + rowCount; - byte[] splitKey = Bytes.toBytes("" + splitRowNum); - - assertTrue("not able to find a splittable region", regions != null); - assertTrue("not able to find a splittable region", regions.length == 1); - - // Split region of the table - long procId = procExec.submitProcedure( - new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], splitKey)); - // Wait the completion - ProcedureTestingUtility.waitProcedure(procExec, procId); - ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - - // Make sure one daughter has 0 rows. - List<HRegion> daughters = UTIL.getMiniHBaseCluster().getRegions(tableName); - assertTrue(daughters.size() == 2); - assertTrue(UTIL.countRows(tableName) == rowCount); - assertTrue(UTIL.countRows(daughters.get(0)) == 0 || UTIL.countRows(daughters.get(1)) == 0); - } - - @Test - public void testSplitTableRegionDeletedRowsDaughter() throws Exception { - final TableName tableName = TableName.valueOf(name.getMethodName()); - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - HRegionInfo [] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, ColumnFamilyName1, ColumnFamilyName2); - insertData(tableName); - // Split to two daughters with one of them only has 1 row - int splitRowNum = rowCount; - deleteData(tableName, splitRowNum); - byte[] splitKey = Bytes.toBytes("" + splitRowNum); - - assertTrue("not able to find a splittable region", regions != null); - assertTrue("not able to find a splittable region", regions.length == 1); - - // Split region of the table - long procId = procExec.submitProcedure( - new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], splitKey)); - // Wait the completion - ProcedureTestingUtility.waitProcedure(procExec, procId); - ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - - UTIL.getAdmin().majorCompact(tableName); - // waiting for the major compaction to complete - UTIL.waitFor(6000, new Waiter.Predicate<IOException>() { - @Override - public boolean evaluate() throws IOException { - return UTIL.getAdmin().getCompactionState(tableName) == CompactionState.NONE; - } - }); - - // Make sure one daughter has 0 rows. - List<HRegion> daughters = UTIL.getMiniHBaseCluster().getRegions(tableName); - assertTrue(daughters.size() == 2); - final int currentRowCount = splitRowNum - startRowNum; - assertTrue(UTIL.countRows(tableName) == currentRowCount); - assertTrue(UTIL.countRows(daughters.get(0)) == 0 || UTIL.countRows(daughters.get(1)) == 0); - } - - @Test - public void testInvalidSplitKey() throws Exception { - final TableName tableName = TableName.valueOf(name.getMethodName()); - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - HRegionInfo [] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, ColumnFamilyName1, ColumnFamilyName2); - insertData(tableName); - - assertTrue("not able to find a splittable region", regions != null); - assertTrue("not able to find a splittable region", regions.length == 1); - - // Split region of the table with null split key - try { - long procId1 = procExec.submitProcedure( - new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], null)); - ProcedureTestingUtility.waitProcedure(procExec, procId1); - fail("unexpected procedure start with invalid split-key"); - } catch (DoNotRetryIOException e) { - LOG.debug("Expected Split procedure construction failure: " + e.getMessage()); - } - } - - @Test - public void testRollbackAndDoubleExecution() throws Exception { - final TableName tableName = TableName.valueOf(name.getMethodName()); - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - HRegionInfo [] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, ColumnFamilyName1, ColumnFamilyName2); - insertData(tableName); - int splitRowNum = startRowNum + rowCount / 2; - byte[] splitKey = Bytes.toBytes("" + splitRowNum); - - assertTrue("not able to find a splittable region", regions != null); - assertTrue("not able to find a splittable region", regions.length == 1); - ProcedureTestingUtility.waitNoProcedureRunning(procExec); - ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true); - - // Split region of the table - long procId = procExec.submitProcedure( - new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], splitKey)); - - // Failing before SPLIT_TABLE_REGION_UPDATE_META we should trigger the - // rollback - // NOTE: the 3 (number before SPLIT_TABLE_REGION_UPDATE_META step) is - // hardcoded, so you have to look at this test at least once when you add a new step. - int numberOfSteps = 3; - MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); - // check that we have only 1 region - assertEquals(1, UTIL.getHBaseAdmin().getTableRegions(tableName).size()); - List<HRegion> daughters = UTIL.getMiniHBaseCluster().getRegions(tableName); - assertEquals(1, daughters.size()); - verifyData(daughters.get(0), startRowNum, rowCount, - Bytes.toBytes(ColumnFamilyName1), Bytes.toBytes(ColumnFamilyName2)); - } - - @Test - public void testRecoveryAndDoubleExecution() throws Exception { - final TableName tableName = TableName.valueOf(name.getMethodName()); - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - HRegionInfo [] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, ColumnFamilyName1, ColumnFamilyName2); - insertData(tableName); - int splitRowNum = startRowNum + rowCount / 2; - byte[] splitKey = Bytes.toBytes("" + splitRowNum); - - assertTrue("not able to find a splittable region", regions != null); - assertTrue("not able to find a splittable region", regions.length == 1); - ProcedureTestingUtility.waitNoProcedureRunning(procExec); - ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true); - - // Split region of the table - long procId = procExec.submitProcedure( - new SplitTableRegionProcedure(procExec.getEnvironment(), regions[0], splitKey)); - - // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); - ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - - verify(tableName, splitRowNum); - } - - private void insertData(final TableName tableName) throws IOException, InterruptedException { - Table t = UTIL.getConnection().getTable(tableName); - Put p; - for (int i= 0; i < rowCount / 2; i++) { - p = new Put(Bytes.toBytes("" + (startRowNum + i))); - p.addColumn(Bytes.toBytes(ColumnFamilyName1), Bytes.toBytes("q1"), Bytes.toBytes(i)); - p.addColumn(Bytes.toBytes(ColumnFamilyName2), Bytes.toBytes("q2"), Bytes.toBytes(i)); - t.put(p); - p = new Put(Bytes.toBytes("" + (startRowNum + rowCount - i - 1))); - p.addColumn(Bytes.toBytes(ColumnFamilyName1), Bytes.toBytes("q1"), Bytes.toBytes(i)); - p.addColumn(Bytes.toBytes(ColumnFamilyName2), Bytes.toBytes("q2"), Bytes.toBytes(i)); - t.put(p); - if (i % 5 == 0) { - UTIL.getAdmin().flush(tableName); - } - } - } - - private void deleteData( - final TableName tableName, - final int startDeleteRowNum) throws IOException, InterruptedException { - Table t = UTIL.getConnection().getTable(tableName); - final int numRows = rowCount + startRowNum - startDeleteRowNum; - Delete d; - for (int i= startDeleteRowNum; i <= numRows + startDeleteRowNum; i++) { - d = new Delete(Bytes.toBytes("" + i)); - t.delete(d); - if (i % 5 == 0) { - UTIL.getAdmin().flush(tableName); - } - } - } - - private void verify(final TableName tableName, final int splitRowNum) throws IOException { - List<HRegion> daughters = UTIL.getMiniHBaseCluster().getRegions(tableName); - assertTrue(daughters.size() == 2); - LOG.info("Row Count = " + UTIL.countRows(tableName)); - assertTrue(UTIL.countRows(tableName) == rowCount); - int startRow; - int numRows; - for (int i = 0; i < daughters.size(); i++) { - if (Bytes.compareTo( - daughters.get(i).getRegionInfo().getStartKey(), HConstants.EMPTY_BYTE_ARRAY) == 0) { - startRow = startRowNum; // first region - numRows = splitRowNum - startRowNum; - } else { - startRow = splitRowNum; - numRows = rowCount + startRowNum - splitRowNum; - } - verifyData( - daughters.get(i), - startRow, - numRows, - ColumnFamilyName1.getBytes(), - ColumnFamilyName2.getBytes()); - } - } - - private void verifyData( - final HRegion newReg, - final int startRow, - final int numRows, - final byte[]... families) - throws IOException { - for (int i = startRow; i < startRow + numRows; i++) { - byte[] row = Bytes.toBytes("" + i); - Get get = new Get(row); - Result result = newReg.get(get); - Cell[] raw = result.rawCells(); - assertEquals(families.length, result.size()); - for (int j = 0; j < families.length; j++) { - assertTrue(CellUtil.matchingRow(raw[j], row)); - assertTrue(CellUtil.matchingFamily(raw[j], families[j])); - } - } - } - - private ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor() { - return UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor(); - } -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java index ac199cb..f806472 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java @@ -51,7 +51,6 @@ import org.apache.hadoop.hbase.util.Bytes; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -97,7 +96,7 @@ public class TestFavoredStochasticBalancerPickers extends BalancerTestBase { } - @Ignore @Test + @Test public void testPickers() throws Exception { TableName tableName = TableName.valueOf("testPickers"); http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.java index 83c9355..ca4337e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.java @@ -45,8 +45,7 @@ import org.apache.hadoop.hbase.favored.FavoredNodeAssignmentHelper; import org.apache.hadoop.hbase.favored.FavoredNodesPlan; import org.apache.hadoop.hbase.master.HMaster; import org.apache.hadoop.hbase.master.RegionState; -import org.apache.hadoop.hbase.master.assignment.RegionStates; -import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode; +import org.apache.hadoop.hbase.master.RegionStates; import org.apache.hadoop.hbase.master.ServerManager; import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.testclassification.MediumTests; @@ -59,7 +58,6 @@ import org.apache.hadoop.hbase.util.JVMClusterUtil; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -265,7 +263,7 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { checkFavoredNodeAssignments(tableName, fnm, regionStates); } - @Ignore @Test + @Test public void testMisplacedRegions() throws Exception { TableName tableName = TableName.valueOf("testMisplacedRegions"); @@ -295,7 +293,7 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { regionFNMap.put(misplacedRegion, newFavoredNodes); fnm.updateFavoredNodes(regionFNMap); - final RegionStates regionStates = master.getAssignmentManager().getRegionStates(); + RegionStates regionStates = master.getAssignmentManager().getRegionStates(); final ServerName current = regionStates.getRegionServerOfRegion(misplacedRegion); assertNull("Misplaced region is still hosted on favored node, not expected.", FavoredNodesPlan.getFavoredServerPosition(fnm.getFavoredNodes(misplacedRegion), current)); @@ -333,7 +331,7 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { stopServersAndWaitUntilProcessed(serversToStop); TEST_UTIL.waitUntilNoRegionsInTransition(); - final RegionStates regionStates = master.getAssignmentManager().getRegionStates(); + RegionStates regionStates = master.getAssignmentManager().getRegionStates(); TEST_UTIL.waitFor(10000, new Waiter.Predicate<Exception>() { @Override public boolean evaluate() throws Exception { @@ -349,7 +347,7 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { checkFavoredNodeAssignments(tableName, fnm, regionStates); } - @Ignore @Test + @Test public void testAllFavoredNodesDead() throws Exception { TableName tableName = TableName.valueOf("testAllFavoredNodesDead"); @@ -367,7 +365,7 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { // Lets kill all the RS that are favored nodes for this region. stopServersAndWaitUntilProcessed(currentFN); - final RegionStates regionStates = master.getAssignmentManager().getRegionStates(); + RegionStates regionStates = master.getAssignmentManager().getRegionStates(); TEST_UTIL.waitFor(10000, new Waiter.Predicate<Exception>() { @Override public boolean evaluate() throws Exception { @@ -387,8 +385,8 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { FavoredNodeAssignmentHelper helper = new FavoredNodeAssignmentHelper(serversForNewFN, conf); helper.initialize(); - for (RegionStateNode regionState: regionStates.getRegionsInTransition()) { - HRegionInfo regionInfo = regionState.getRegionInfo(); + for (RegionState regionState : regionStates.getRegionsInTransition()) { + HRegionInfo regionInfo = regionState.getRegion(); List<ServerName> newFavoredNodes = helper.generateFavoredNodes(regionInfo); assertNotNull(newFavoredNodes); assertEquals(FavoredNodeAssignmentHelper.FAVORED_NODES_NUM, newFavoredNodes.size()); @@ -410,7 +408,7 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { checkFavoredNodeAssignments(tableName, fnm, regionStates); } - @Ignore @Test + @Test public void testAllFavoredNodesDeadMasterRestarted() throws Exception { TableName tableName = TableName.valueOf("testAllFavoredNodesDeadMasterRestarted"); @@ -428,8 +426,7 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { // Lets kill all the RS that are favored nodes for this region. stopServersAndWaitUntilProcessed(currentFN); - final RegionStates regionStatesBeforeMaster = - master.getAssignmentManager().getRegionStates(); + RegionStates regionStatesBeforeMaster = master.getAssignmentManager().getRegionStates(); TEST_UTIL.waitFor(10000, new Waiter.Predicate<Exception>() { @Override public boolean evaluate() throws Exception { @@ -441,8 +438,8 @@ public class TestFavoredStochasticLoadBalancer extends BalancerTestBase { regionStatesBeforeMaster.getRegionState(region).isFailedOpen()); List<HRegionInfo> rit = Lists.newArrayList(); - for (RegionStateNode regionState: regionStatesBeforeMaster.getRegionsInTransition()) { - HRegionInfo regionInfo = regionState.getRegionInfo(); + for (RegionState regionState : regionStatesBeforeMaster.getRegionsInTransition()) { + HRegionInfo regionInfo = regionState.getRegion(); LOG.debug("Region in transition after stopping FN's: " + regionInfo); rit.add(regionInfo); assertTrue("Region: " + regionInfo + " should be RIT", http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java index b80bcc8..586f93e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java @@ -43,7 +43,6 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.test.LoadTestKVGenerator; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -179,7 +178,7 @@ public class TestSimpleRegionNormalizerOnCluster { admin.deleteTable(TABLENAME); } - @Ignore @Test(timeout = 60000) // TODO: FIX! + @Test(timeout = 60000) @SuppressWarnings("deprecation") public void testRegionNormalizationMergeOnCluster() throws Exception { final TableName tableName = TableName.valueOf(name.getMethodName()); http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.java index 822e57c..2b28c9f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.java @@ -80,7 +80,7 @@ public class MasterProcedureSchedulerPerformanceEvaluation extends AbstractHBase private class RegionProcedure extends TestMasterProcedureScheduler.TestRegionProcedure { RegionProcedure(long procId, HRegionInfo hri) { - super(procId, hri.getTable(), TableOperationType.REGION_UNASSIGN, hri); + super(procId, hri.getTable(), TableOperationType.UNASSIGN, hri); } @Override http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java index 99dcf1d..ce8b0c6 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java @@ -25,7 +25,6 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.List; import java.util.TreeSet; -import java.util.concurrent.Callable; import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.logging.Log; @@ -49,11 +48,7 @@ import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.TableState; import org.apache.hadoop.hbase.master.HMaster; -import org.apache.hadoop.hbase.master.MasterMetaBootstrap; -import org.apache.hadoop.hbase.master.RegionState; import org.apache.hadoop.hbase.master.TableStateManager; -import org.apache.hadoop.hbase.master.assignment.AssignmentManager; -import org.apache.hadoop.hbase.monitoring.TaskMonitor; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; import org.apache.hadoop.hbase.util.Bytes; @@ -64,45 +59,7 @@ import org.apache.hadoop.hbase.util.ModifyRegionUtils; public class MasterProcedureTestingUtility { private static final Log LOG = LogFactory.getLog(MasterProcedureTestingUtility.class); - private MasterProcedureTestingUtility() { } - - public static void restartMasterProcedureExecutor(ProcedureExecutor<MasterProcedureEnv> procExec) - throws Exception { - final MasterProcedureEnv env = procExec.getEnvironment(); - final HMaster master = (HMaster)env.getMasterServices(); - ProcedureTestingUtility.restart(procExec, true, true, - // stop services - new Callable<Void>() { - @Override - public Void call() throws Exception { - final AssignmentManager am = env.getAssignmentManager(); - // try to simulate a master restart by removing the ServerManager states about seqIDs - for (RegionState regionState: am.getRegionStates().getRegionStates()) { - env.getMasterServices().getServerManager().removeRegion(regionState.getRegion()); - } - am.stop(); - master.setInitialized(false); - return null; - } - }, - // restart services - new Callable<Void>() { - @Override - public Void call() throws Exception { - final AssignmentManager am = env.getAssignmentManager(); - am.start(); - if (true) { - MasterMetaBootstrap metaBootstrap = new MasterMetaBootstrap(master, - TaskMonitor.get().createStatus("meta")); - metaBootstrap.splitMetaLogsBeforeAssignment(); - metaBootstrap.assignMeta(); - metaBootstrap.processDeadServers(); - } - am.joinCluster(); - master.setInitialized(true); - return null; - } - }); + private MasterProcedureTestingUtility() { } // ========================================================================== @@ -338,9 +295,6 @@ public class MasterProcedureTestingUtility { return put; } - // ========================================================================== - // Procedure Helpers - // ========================================================================== public static long generateNonceGroup(final HMaster master) { return master.getClusterConnection().getNonceGenerator().getNonceGroup(); } @@ -364,6 +318,13 @@ public class MasterProcedureTestingUtility { * finish. * @see #testRecoveryAndDoubleExecution(ProcedureExecutor, long) */ + public static void testRecoveryAndDoubleExecution( + final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId, + final int numSteps) throws Exception { + testRecoveryAndDoubleExecution(procExec, procId, numSteps, true); + ProcedureTestingUtility.assertProcNotFailed(procExec, procId); + } + private static void testRecoveryAndDoubleExecution( final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId, final int numSteps, final boolean expectExecRunning) throws Exception { @@ -375,9 +336,9 @@ public class MasterProcedureTestingUtility { // restart executor/store // execute step N - save on store for (int i = 0; i < numSteps; ++i) { - LOG.info("Restart " + i + " exec state=" + procExec.getProcedure(procId)); + LOG.info("Restart " + i + " exec state: " + procExec.getProcedure(procId)); ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId); - restartMasterProcedureExecutor(procExec); + ProcedureTestingUtility.restart(procExec); ProcedureTestingUtility.waitProcedure(procExec, procId); } @@ -405,8 +366,8 @@ public class MasterProcedureTestingUtility { ProcedureTestingUtility.waitProcedure(procExec, procId); assertEquals(false, procExec.isRunning()); for (int i = 0; !procExec.isFinished(procId); ++i) { - LOG.info("Restart " + i + " exec state=" + procExec.getProcedure(procId)); - restartMasterProcedureExecutor(procExec); + LOG.info("Restart " + i + " exec state: " + procExec.getProcedure(procId)); + ProcedureTestingUtility.restart(procExec); ProcedureTestingUtility.waitProcedure(procExec, procId); } assertEquals(true, procExec.isRunning()); @@ -438,7 +399,7 @@ public class MasterProcedureTestingUtility { for (int i = 0; !procExec.isFinished(procId); ++i) { LOG.info("Restart " + i + " rollback state: " + procExec.getProcedure(procId)); ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId); - restartMasterProcedureExecutor(procExec); + ProcedureTestingUtility.restart(procExec); ProcedureTestingUtility.waitProcedure(procExec, procId); } } finally { @@ -483,7 +444,7 @@ public class MasterProcedureTestingUtility { try { ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId); LOG.info("Restart and rollback procId=" + procId); - restartMasterProcedureExecutor(procExec); + ProcedureTestingUtility.restart(procExec); ProcedureTestingUtility.waitProcedure(procExec, procId); } finally { assertTrue(procExec.unregisterListener(abortListener)); http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestAddColumnFamilyProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestAddColumnFamilyProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestAddColumnFamilyProcedure.java index 506e537..31eedfc 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestAddColumnFamilyProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestAddColumnFamilyProcedure.java @@ -22,28 +22,26 @@ import static org.junit.Assert.assertTrue; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.hbase.CategoryBasedTimeout; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.InvalidFamilyOperationException; import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.AddColumnFamilyState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.rules.TestName; -import org.junit.rules.TestRule; @Category({MasterTests.class, MediumTests.class}) public class TestAddColumnFamilyProcedure extends TestTableDDLProcedureBase { private static final Log LOG = LogFactory.getLog(TestAddColumnFamilyProcedure.class); - @Rule public final TestRule timeout = CategoryBasedTimeout.builder().withTimeout(this.getClass()). - withLookingForStuckThread(true).build(); - @Rule public TestName name = new TestName(); + @Rule + public TestName name = new TestName(); @Test(timeout = 60000) public void testAddColumnFamily() throws Exception { @@ -63,7 +61,8 @@ public class TestAddColumnFamilyProcedure extends TestTableDDLProcedureBase { ProcedureTestingUtility.waitProcedure(procExec, procId1); ProcedureTestingUtility.assertProcNotFailed(procExec, procId1); - MasterProcedureTestingUtility.validateColumnFamilyAddition(getMaster(), tableName, cf1); + MasterProcedureTestingUtility.validateColumnFamilyAddition(UTIL.getHBaseCluster().getMaster(), + tableName, cf1); // Test 2: Add a column family offline UTIL.getAdmin().disableTable(tableName); @@ -72,7 +71,8 @@ public class TestAddColumnFamilyProcedure extends TestTableDDLProcedureBase { // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId2); ProcedureTestingUtility.assertProcNotFailed(procExec, procId2); - MasterProcedureTestingUtility.validateColumnFamilyAddition(getMaster(), tableName, cf2); + MasterProcedureTestingUtility.validateColumnFamilyAddition(UTIL.getHBaseCluster().getMaster(), + tableName, cf2); } @Test(timeout=60000) @@ -91,7 +91,8 @@ public class TestAddColumnFamilyProcedure extends TestTableDDLProcedureBase { // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId1); ProcedureTestingUtility.assertProcNotFailed(procExec, procId1); - MasterProcedureTestingUtility.validateColumnFamilyAddition(getMaster(), tableName, cf2); + MasterProcedureTestingUtility.validateColumnFamilyAddition(UTIL.getHBaseCluster().getMaster(), + tableName, cf2); // add the column family that exists long procId2 = procExec.submitProcedure( @@ -139,9 +140,11 @@ public class TestAddColumnFamilyProcedure extends TestTableDDLProcedureBase { new AddColumnFamilyProcedure(procExec.getEnvironment(), tableName, columnDescriptor)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = AddColumnFamilyState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); - MasterProcedureTestingUtility.validateColumnFamilyAddition(getMaster(), tableName, cf4); + MasterProcedureTestingUtility.validateColumnFamilyAddition(UTIL.getHBaseCluster().getMaster(), + tableName, cf4); } @Test(timeout = 60000) @@ -161,9 +164,11 @@ public class TestAddColumnFamilyProcedure extends TestTableDDLProcedureBase { new AddColumnFamilyProcedure(procExec.getEnvironment(), tableName, columnDescriptor)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = AddColumnFamilyState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); - MasterProcedureTestingUtility.validateColumnFamilyAddition(getMaster(), tableName, cf5); + MasterProcedureTestingUtility.validateColumnFamilyAddition(UTIL.getHBaseCluster().getMaster(), + tableName, cf5); } @Test(timeout = 60000) @@ -182,9 +187,10 @@ public class TestAddColumnFamilyProcedure extends TestTableDDLProcedureBase { long procId = procExec.submitProcedure( new AddColumnFamilyProcedure(procExec.getEnvironment(), tableName, columnDescriptor)); - int numberOfSteps = 0; // failing at "pre operations" + int numberOfSteps = 1; // failing at "pre operations" MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); - MasterProcedureTestingUtility.validateColumnFamilyDeletion(getMaster(), tableName, cf6); + MasterProcedureTestingUtility.validateColumnFamilyDeletion(UTIL.getHBaseCluster().getMaster(), + tableName, cf6); } } http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.java index b70aff3..54efe76 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.java @@ -18,8 +18,6 @@ package org.apache.hadoop.hbase.master.procedure; -import static org.junit.Assert.assertTrue; - import java.util.List; import org.apache.commons.logging.Log; @@ -30,7 +28,6 @@ import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.TableExistsException; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; -import org.apache.hadoop.hbase.client.SnapshotDescription; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; @@ -46,6 +43,8 @@ import org.junit.After; import org.junit.Test; import org.junit.experimental.categories.Category; +import static org.junit.Assert.assertTrue; + @Category({MasterTests.class, MediumTests.class}) public class TestCloneSnapshotProcedure extends TestTableDDLProcedureBase { private static final Log LOG = LogFactory.getLog(TestCloneSnapshotProcedure.class); @@ -148,7 +147,8 @@ public class TestCloneSnapshotProcedure extends TestTableDDLProcedureBase { new CloneSnapshotProcedure(procExec.getEnvironment(), htd, snapshotDesc)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = CloneSnapshotState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateTableIsEnabled( UTIL.getHBaseCluster().getMaster(), http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.java index 147ee27..995d98d 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.java @@ -35,6 +35,7 @@ import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.constraint.ConstraintException; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateNamespaceState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.junit.After; @@ -190,7 +191,8 @@ public class TestCreateNamespaceProcedure { new CreateNamespaceProcedure(procExec.getEnvironment(), nsd)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = CreateNamespaceState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); // Validate the creation of namespace ProcedureTestingUtility.assertProcNotFailed(procExec, procId); http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java index 6bd88c7..c09016c 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java @@ -18,8 +18,6 @@ package org.apache.hadoop.hbase.master.procedure; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; @@ -42,12 +40,8 @@ import static org.junit.Assert.assertTrue; @Category({MasterTests.class, MediumTests.class}) public class TestCreateTableProcedure extends TestTableDDLProcedureBase { - private static final Log LOG = LogFactory.getLog(TestCreateTableProcedure.class); - - private static final String F1 = "f1"; - private static final String F2 = "f2"; - - @Rule public TestName name = new TestName(); + @Rule + public TestName name = new TestName(); @Test(timeout=60000) public void testSimpleCreate() throws Exception { @@ -67,8 +61,9 @@ public class TestCreateTableProcedure extends TestTableDDLProcedureBase { private void testSimpleCreate(final TableName tableName, byte[][] splitKeys) throws Exception { HRegionInfo[] regions = MasterProcedureTestingUtility.createTable( - getMasterProcedureExecutor(), tableName, splitKeys, F1, F2); - MasterProcedureTestingUtility.validateTableCreation(getMaster(), tableName, regions, F1, F2); + getMasterProcedureExecutor(), tableName, splitKeys, "f1", "f2"); + MasterProcedureTestingUtility.validateTableCreation( + UTIL.getHBaseCluster().getMaster(), tableName, regions, "f1", "f2"); } @Test(timeout=60000) @@ -131,21 +126,25 @@ public class TestCreateTableProcedure extends TestTableDDLProcedureBase { new CreateTableProcedure(procExec.getEnvironment(), htd, regions)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); - MasterProcedureTestingUtility.validateTableCreation(getMaster(), tableName, regions, F1, F2); + // NOTE: the 6 (number of CreateTableState steps) is hardcoded, + // so you have to look at this test at least once when you add a new step. + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, 6); + + MasterProcedureTestingUtility.validateTableCreation( + UTIL.getHBaseCluster().getMaster(), tableName, regions, "f1", "f2"); } @Test(timeout=90000) public void testRollbackAndDoubleExecution() throws Exception { final TableName tableName = TableName.valueOf(name.getMethodName()); - testRollbackAndDoubleExecution(MasterProcedureTestingUtility.createHTD(tableName, F1, F2)); + testRollbackAndDoubleExecution(MasterProcedureTestingUtility.createHTD(tableName, "f1", "f2")); } @Test(timeout=90000) public void testRollbackAndDoubleExecutionOnMobTable() throws Exception { final TableName tableName = TableName.valueOf(name.getMethodName()); - HTableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, F1, F2); - htd.getFamily(Bytes.toBytes(F1)).setMobEnabled(true); + HTableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f1", "f2"); + htd.getFamily(Bytes.toBytes("f1")).setMobEnabled(true); testRollbackAndDoubleExecution(htd); } @@ -167,24 +166,11 @@ public class TestCreateTableProcedure extends TestTableDDLProcedureBase { MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); TableName tableName = htd.getTableName(); - MasterProcedureTestingUtility.validateTableDeletion(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableDeletion( + UTIL.getHBaseCluster().getMaster(), tableName); // are we able to create the table after a rollback? resetProcExecutorTestingKillFlag(); testSimpleCreate(tableName, splitKeys); } - - @Test - public void testMRegions() throws Exception { - final byte[][] splitKeys = new byte[500][]; - for (int i = 0; i < splitKeys.length; ++i) { - splitKeys[i] = Bytes.toBytes(String.format("%08d", i)); - } - - final HTableDescriptor htd = MasterProcedureTestingUtility.createHTD( - TableName.valueOf("TestMRegions"), F1, F2); - UTIL.getHBaseAdmin().createTableAsync(htd, splitKeys) - .get(10, java.util.concurrent.TimeUnit.HOURS); - LOG.info("TABLE CREATED"); - } } http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedure.java index 6096755..c4bdc18 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedure.java @@ -22,27 +22,26 @@ import static org.junit.Assert.assertTrue; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.hbase.CategoryBasedTimeout; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.InvalidFamilyOperationException; import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.DeleteColumnFamilyState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.rules.TestName; -import org.junit.rules.TestRule; @Category({MasterTests.class, MediumTests.class}) public class TestDeleteColumnFamilyProcedure extends TestTableDDLProcedureBase { private static final Log LOG = LogFactory.getLog(TestDeleteColumnFamilyProcedure.class); - @Rule public final TestRule timeout = CategoryBasedTimeout.builder().withTimeout(this.getClass()). - withLookingForStuckThread(true).build(); - @Rule public TestName name = new TestName(); + + @Rule + public TestName name = new TestName(); @Test(timeout = 60000) public void testDeleteColumnFamily() throws Exception { @@ -60,7 +59,8 @@ public class TestDeleteColumnFamilyProcedure extends TestTableDDLProcedureBase { ProcedureTestingUtility.waitProcedure(procExec, procId1); ProcedureTestingUtility.assertProcNotFailed(procExec, procId1); - MasterProcedureTestingUtility.validateColumnFamilyDeletion(getMaster(), tableName, cf1); + MasterProcedureTestingUtility.validateColumnFamilyDeletion(UTIL.getHBaseCluster().getMaster(), + tableName, cf1); // Test 2: delete the column family that exists offline UTIL.getAdmin().disableTable(tableName); @@ -88,7 +88,8 @@ public class TestDeleteColumnFamilyProcedure extends TestTableDDLProcedureBase { // First delete should succeed ProcedureTestingUtility.assertProcNotFailed(procExec, procId1); - MasterProcedureTestingUtility.validateColumnFamilyDeletion(getMaster(), tableName, cf2); + MasterProcedureTestingUtility.validateColumnFamilyDeletion(UTIL.getHBaseCluster().getMaster(), + tableName, cf2); // delete the column family that does not exist long procId2 = procExec.submitProcedure( @@ -158,9 +159,11 @@ public class TestDeleteColumnFamilyProcedure extends TestTableDDLProcedureBase { new DeleteColumnFamilyProcedure(procExec.getEnvironment(), tableName, cf4.getBytes())); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = DeleteColumnFamilyState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); - MasterProcedureTestingUtility.validateColumnFamilyDeletion(getMaster(), tableName, cf4); + MasterProcedureTestingUtility.validateColumnFamilyDeletion(UTIL.getHBaseCluster().getMaster(), + tableName, cf4); } @Test(timeout = 60000) @@ -180,9 +183,11 @@ public class TestDeleteColumnFamilyProcedure extends TestTableDDLProcedureBase { new DeleteColumnFamilyProcedure(procExec.getEnvironment(), tableName, cf5.getBytes())); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = DeleteColumnFamilyState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); - MasterProcedureTestingUtility.validateColumnFamilyDeletion(getMaster(), tableName, cf5); + MasterProcedureTestingUtility.validateColumnFamilyDeletion(UTIL.getHBaseCluster().getMaster(), + tableName, cf5); } @Test(timeout = 60000) @@ -202,10 +207,10 @@ public class TestDeleteColumnFamilyProcedure extends TestTableDDLProcedureBase { long procId = procExec.submitProcedure( new DeleteColumnFamilyProcedure(procExec.getEnvironment(), tableName, cf5.getBytes())); - int numberOfSteps = 0; // failing at pre operation + int numberOfSteps = 1; // failing at pre operation MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateTableCreation( - getMaster(), tableName, regions, "f1", "f2", "f3", cf5); + UTIL.getHBaseCluster().getMaster(), tableName, regions, "f1", "f2", "f3", cf5); } } http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.java index 5ecacb6..acedf1d 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.java @@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.constraint.ConstraintException; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.DeleteNamespaceState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.junit.After; @@ -174,7 +175,8 @@ public class TestDeleteNamespaceProcedure { new DeleteNamespaceProcedure(procExec.getEnvironment(), namespaceName)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = DeleteNamespaceState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); // Validate the deletion of namespace ProcedureTestingUtility.assertProcNotFailed(procExec, procId); http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java index 2a11544..431e3e4 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java @@ -20,7 +20,6 @@ package org.apache.hadoop.hbase.master.procedure; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.hbase.CategoryBasedTimeout; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.TableName; @@ -35,16 +34,15 @@ import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.rules.TestName; -import org.junit.rules.TestRule; import static org.junit.Assert.assertTrue; @Category({MasterTests.class, MediumTests.class}) public class TestDeleteTableProcedure extends TestTableDDLProcedureBase { private static final Log LOG = LogFactory.getLog(TestDeleteTableProcedure.class); - @Rule public final TestRule timeout = CategoryBasedTimeout.builder().withTimeout(this.getClass()). - withLookingForStuckThread(true).build(); - @Rule public TestName name = new TestName(); + + @Rule + public TestName name = new TestName(); @Test(timeout=60000, expected=TableNotFoundException.class) public void testDeleteNotExistentTable() throws Exception { @@ -92,7 +90,8 @@ public class TestDeleteTableProcedure extends TestTableDDLProcedureBase { // First delete should succeed ProcedureTestingUtility.assertProcNotFailed(procExec, procId1); - MasterProcedureTestingUtility.validateTableDeletion(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableDeletion( + UTIL.getHBaseCluster().getMaster(), tableName); // Second delete should fail with TableNotFound ProcedureInfo result = procExec.getResult(procId2); @@ -127,7 +126,8 @@ public class TestDeleteTableProcedure extends TestTableDDLProcedureBase { long procId = ProcedureTestingUtility.submitAndWait(procExec, new DeleteTableProcedure(procExec.getEnvironment(), tableName)); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - MasterProcedureTestingUtility.validateTableDeletion(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableDeletion( + UTIL.getHBaseCluster().getMaster(), tableName); } @Test(timeout=60000) @@ -149,8 +149,11 @@ public class TestDeleteTableProcedure extends TestTableDDLProcedureBase { new DeleteTableProcedure(procExec.getEnvironment(), tableName)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + // NOTE: the 6 (number of DeleteTableState steps) is hardcoded, + // so you have to look at this test at least once when you add a new step. + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, 6); - MasterProcedureTestingUtility.validateTableDeletion(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableDeletion( + UTIL.getHBaseCluster().getMaster(), tableName); } } http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDisableTableProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDisableTableProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDisableTableProcedure.java index 11c4e2a..d3fccbe 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDisableTableProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDisableTableProcedure.java @@ -22,12 +22,12 @@ import static org.junit.Assert.assertTrue; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.hbase.CategoryBasedTimeout; import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.TableNotEnabledException; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.DisableTableState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.util.Bytes; @@ -36,15 +36,13 @@ import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.rules.TestName; -import org.junit.rules.TestRule; @Category({MasterTests.class, MediumTests.class}) public class TestDisableTableProcedure extends TestTableDDLProcedureBase { private static final Log LOG = LogFactory.getLog(TestDisableTableProcedure.class); - @Rule public final TestRule timeout = CategoryBasedTimeout.builder().withTimeout(this.getClass()). - withLookingForStuckThread(true).build(); - @Rule public TestName name = new TestName(); + @Rule + public TestName name = new TestName(); @Test(timeout = 60000) public void testDisableTable() throws Exception { @@ -59,7 +57,8 @@ public class TestDisableTableProcedure extends TestTableDDLProcedureBase { // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - MasterProcedureTestingUtility.validateTableIsDisabled(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), + tableName); } @Test(timeout = 60000) @@ -75,7 +74,8 @@ public class TestDisableTableProcedure extends TestTableDDLProcedureBase { // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId1); ProcedureTestingUtility.assertProcNotFailed(procExec, procId1); - MasterProcedureTestingUtility.validateTableIsDisabled(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), + tableName); // Disable the table again - expect failure long procId2 = procExec.submitProcedure(new DisableTableProcedure( @@ -107,7 +107,8 @@ public class TestDisableTableProcedure extends TestTableDDLProcedureBase { // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId4); ProcedureTestingUtility.assertProcNotFailed(procExec, procId4); - MasterProcedureTestingUtility.validateTableIsDisabled(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), + tableName); } @Test(timeout=60000) @@ -127,8 +128,9 @@ public class TestDisableTableProcedure extends TestTableDDLProcedureBase { new DisableTableProcedure(procExec.getEnvironment(), tableName, false)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); - - MasterProcedureTestingUtility.validateTableIsDisabled(getMaster(), tableName); + int numberOfSteps = DisableTableState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); + MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), + tableName); } } http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.java index 01f9ed8..81f2576 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.java @@ -22,12 +22,12 @@ import static org.junit.Assert.assertTrue; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.hbase.CategoryBasedTimeout; import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.TableNotDisabledException; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.util.Bytes; @@ -36,14 +36,13 @@ import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.rules.TestName; -import org.junit.rules.TestRule; @Category({MasterTests.class, MediumTests.class}) public class TestEnableTableProcedure extends TestTableDDLProcedureBase { private static final Log LOG = LogFactory.getLog(TestEnableTableProcedure.class); - @Rule public final TestRule timeout = CategoryBasedTimeout.builder().withTimeout(this.getClass()). - withLookingForStuckThread(true).build(); - @Rule public TestName name = new TestName(); + + @Rule + public TestName name = new TestName(); @Test(timeout = 60000) public void testEnableTable() throws Exception { @@ -59,7 +58,8 @@ public class TestEnableTableProcedure extends TestTableDDLProcedureBase { // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); - MasterProcedureTestingUtility.validateTableIsEnabled(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableIsEnabled(UTIL.getHBaseCluster().getMaster(), + tableName); } @Test(timeout=60000, expected=TableNotDisabledException.class) @@ -113,9 +113,10 @@ public class TestEnableTableProcedure extends TestTableDDLProcedureBase { new EnableTableProcedure(procExec.getEnvironment(), tableName, false)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); - - MasterProcedureTestingUtility.validateTableIsEnabled(getMaster(), tableName); + int numberOfSteps = EnableTableState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); + MasterProcedureTestingUtility.validateTableIsEnabled(UTIL.getHBaseCluster().getMaster(), + tableName); } @Test(timeout = 60000) @@ -135,8 +136,9 @@ public class TestEnableTableProcedure extends TestTableDDLProcedureBase { long procId = procExec.submitProcedure( new EnableTableProcedure(procExec.getEnvironment(), tableName, false)); - int numberOfSteps = 0; // failing at pre operation + int numberOfSteps = 1; // failing at pre operation MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); - MasterProcedureTestingUtility.validateTableIsDisabled(getMaster(), tableName); + MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), + tableName); } } http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.java index d2df2bf..af48302 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.java @@ -19,6 +19,8 @@ package org.apache.hadoop.hbase.master.procedure; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -29,7 +31,6 @@ import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.procedure2.Procedure; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore; @@ -54,7 +55,6 @@ import org.junit.rules.TestRule; public class TestMasterFailoverWithProcedures { private static final Log LOG = LogFactory.getLog(TestMasterFailoverWithProcedures.class); - @ClassRule public static final TestRule timeout = CategoryBasedTimeout.forClass(TestMasterFailoverWithProcedures.class); @@ -116,7 +116,7 @@ public class TestMasterFailoverWithProcedures { HRegionInfo[] regions = ModifyRegionUtils.createHRegionInfos(htd, splitKeys); long procId = procExec.submitProcedure( new CreateTableProcedure(procExec.getEnvironment(), htd, regions)); - testRecoveryAndDoubleExecution(UTIL, procId, step); + testRecoveryAndDoubleExecution(UTIL, procId, step, CreateTableState.values()); MasterProcedureTestingUtility.validateTableCreation( UTIL.getHBaseCluster().getMaster(), tableName, regions, "f1", "f2"); @@ -154,7 +154,7 @@ public class TestMasterFailoverWithProcedures { // Start the Delete procedure && kill the executor long procId = procExec.submitProcedure( new DeleteTableProcedure(procExec.getEnvironment(), tableName)); - testRecoveryAndDoubleExecution(UTIL, procId, step); + testRecoveryAndDoubleExecution(UTIL, procId, step, DeleteTableState.values()); MasterProcedureTestingUtility.validateTableDeletion( UTIL.getHBaseCluster().getMaster(), tableName); @@ -197,7 +197,7 @@ public class TestMasterFailoverWithProcedures { // Start the Truncate procedure && kill the executor long procId = procExec.submitProcedure( new TruncateTableProcedure(procExec.getEnvironment(), tableName, preserveSplits)); - testRecoveryAndDoubleExecution(UTIL, procId, step); + testRecoveryAndDoubleExecution(UTIL, procId, step, TruncateTableState.values()); ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false); UTIL.waitUntilAllRegionsAssigned(tableName); @@ -251,7 +251,7 @@ public class TestMasterFailoverWithProcedures { // Start the Delete procedure && kill the executor long procId = procExec.submitProcedure( new DisableTableProcedure(procExec.getEnvironment(), tableName, false)); - testRecoveryAndDoubleExecution(UTIL, procId, step); + testRecoveryAndDoubleExecution(UTIL, procId, step, DisableTableState.values()); MasterProcedureTestingUtility.validateTableIsDisabled( UTIL.getHBaseCluster().getMaster(), tableName); @@ -288,7 +288,7 @@ public class TestMasterFailoverWithProcedures { // Start the Delete procedure && kill the executor long procId = procExec.submitProcedure( new EnableTableProcedure(procExec.getEnvironment(), tableName, false)); - testRecoveryAndDoubleExecution(UTIL, procId, step); + testRecoveryAndDoubleExecution(UTIL, procId, step, EnableTableState.values()); MasterProcedureTestingUtility.validateTableIsEnabled( UTIL.getHBaseCluster().getMaster(), tableName); @@ -297,17 +297,16 @@ public class TestMasterFailoverWithProcedures { // ========================================================================== // Test Helpers // ========================================================================== - public static void testRecoveryAndDoubleExecution(final HBaseTestingUtility testUtil, - final long procId, final int lastStepBeforeFailover) throws Exception { + public static <TState> void testRecoveryAndDoubleExecution(final HBaseTestingUtility testUtil, + final long procId, final int lastStepBeforeFailover, TState[] states) throws Exception { ProcedureExecutor<MasterProcedureEnv> procExec = testUtil.getHBaseCluster().getMaster().getMasterProcedureExecutor(); ProcedureTestingUtility.waitProcedure(procExec, procId); - final Procedure proc = procExec.getProcedure(procId); for (int i = 0; i < lastStepBeforeFailover; ++i) { - LOG.info("Restart "+ i +" exec state: " + proc); + LOG.info("Restart "+ i +" exec state: " + states[i]); ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId); - MasterProcedureTestingUtility.restartMasterProcedureExecutor(procExec); + ProcedureTestingUtility.restart(procExec); ProcedureTestingUtility.waitProcedure(procExec, procId); } ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId); http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java index b7bc28f..6e85a9f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java @@ -109,7 +109,7 @@ public class TestMasterProcedureEvents { ProcedureExecutor<MasterProcedureEnv> procExec = master.getMasterProcedureExecutor(); while (!master.isServerCrashProcessingEnabled() || !master.isInitialized() || - master.getAssignmentManager().getRegionStates().hasRegionsInTransition()) { + master.getAssignmentManager().getRegionStates().isRegionsInTransition()) { Thread.sleep(25); } http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.java index 5f20c7f..e23c90a 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.java @@ -343,11 +343,11 @@ public class TestMasterProcedureScheduler { final HRegionInfo regionA = new HRegionInfo(tableName, Bytes.toBytes("a"), Bytes.toBytes("b")); queue.addBack(new TestRegionProcedure(1, tableName, - TableProcedureInterface.TableOperationType.REGION_ASSIGN, regionA)); + TableProcedureInterface.TableOperationType.ASSIGN, regionA)); queue.addBack(new TestTableProcedure(2, tableName, TableProcedureInterface.TableOperationType.EDIT)); queue.addBack(new TestRegionProcedure(3, tableName, - TableProcedureInterface.TableOperationType.REGION_UNASSIGN, regionA)); + TableProcedureInterface.TableOperationType.UNASSIGN, regionA)); // Fetch the 1st item and take the shared lock Procedure proc = queue.poll(); @@ -391,13 +391,13 @@ public class TestMasterProcedureScheduler { queue.addBack(new TestTableProcedure(1, tableName, TableProcedureInterface.TableOperationType.EDIT)); queue.addBack(new TestRegionProcedure(2, tableName, - TableProcedureInterface.TableOperationType.REGION_MERGE, regionA, regionB)); + TableProcedureInterface.TableOperationType.MERGE, regionA, regionB)); queue.addBack(new TestRegionProcedure(3, tableName, - TableProcedureInterface.TableOperationType.REGION_SPLIT, regionA)); + TableProcedureInterface.TableOperationType.SPLIT, regionA)); queue.addBack(new TestRegionProcedure(4, tableName, - TableProcedureInterface.TableOperationType.REGION_SPLIT, regionB)); + TableProcedureInterface.TableOperationType.SPLIT, regionB)); queue.addBack(new TestRegionProcedure(5, tableName, - TableProcedureInterface.TableOperationType.REGION_UNASSIGN, regionC)); + TableProcedureInterface.TableOperationType.UNASSIGN, regionC)); // Fetch the 1st item and take the write lock Procedure proc = queue.poll(); @@ -520,9 +520,9 @@ public class TestMasterProcedureScheduler { final HRegionInfo region = new HRegionInfo(tableName, Bytes.toBytes("a"), Bytes.toBytes("b")); queue.addBack(new TestRegionProcedure(1, tableName, - TableProcedureInterface.TableOperationType.REGION_SPLIT, region)); + TableProcedureInterface.TableOperationType.SPLIT, region)); queue.addBack(new TestRegionProcedure(1, 2, tableName, - TableProcedureInterface.TableOperationType.REGION_UNASSIGN, region)); + TableProcedureInterface.TableOperationType.UNASSIGN, region)); queue.addBack(new TestRegionProcedure(3, tableName, TableProcedureInterface.TableOperationType.REGION_EDIT, region)); @@ -600,7 +600,7 @@ public class TestMasterProcedureScheduler { final TestRegionProcedure[] childProcs = new TestRegionProcedure[regions.length]; for (int i = 0; i < regions.length; ++i) { childProcs[i] = new TestRegionProcedure(1, 2 + i, tableName, - TableProcedureInterface.TableOperationType.REGION_ASSIGN, regions[i]); + TableProcedureInterface.TableOperationType.ASSIGN, regions[i]); } testInheritedXLockAndChildrenSharedLock(tableName, new TestTableProcedure(1, tableName, TableProcedureInterface.TableOperationType.CREATE), @@ -615,7 +615,7 @@ public class TestMasterProcedureScheduler { final TestRegionProcedure[] childProcs = new TestRegionProcedure[regions.length]; for (int i = 0; i < regions.length; ++i) { childProcs[i] = new TestRegionProcedure(1, 2, 3 + i, tableName, - TableProcedureInterface.TableOperationType.REGION_ASSIGN, regions[i]); + TableProcedureInterface.TableOperationType.ASSIGN, regions[i]); } testInheritedXLockAndChildrenSharedLock(tableName, new TestTableProcedure(1, tableName, TableProcedureInterface.TableOperationType.CREATE), http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyColumnFamilyProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyColumnFamilyProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyColumnFamilyProcedure.java index f1667ed..184150b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyColumnFamilyProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyColumnFamilyProcedure.java @@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ModifyColumnFamilyState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.junit.Rule; @@ -124,7 +125,8 @@ public class TestModifyColumnFamilyProcedure extends TestTableDDLProcedureBase { new ModifyColumnFamilyProcedure(procExec.getEnvironment(), tableName, columnDescriptor)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = ModifyColumnFamilyState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyModification(UTIL.getHBaseCluster() .getMaster(), tableName, cf3, columnDescriptor); @@ -151,7 +153,8 @@ public class TestModifyColumnFamilyProcedure extends TestTableDDLProcedureBase { new ModifyColumnFamilyProcedure(procExec.getEnvironment(), tableName, columnDescriptor)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = ModifyColumnFamilyState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyModification(UTIL.getHBaseCluster() .getMaster(), tableName, cf4, columnDescriptor); @@ -177,7 +180,7 @@ public class TestModifyColumnFamilyProcedure extends TestTableDDLProcedureBase { long procId = procExec.submitProcedure( new ModifyColumnFamilyProcedure(procExec.getEnvironment(), tableName, columnDescriptor)); - int numberOfSteps = 0; // failing at pre operation + int numberOfSteps = 1; // failing at pre operation MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); } } http://git-wip-us.apache.org/repos/asf/hbase/blob/a3c5a744/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java index 5cb117b..1b53d23 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java @@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.ProcedureInfo; import org.apache.hadoop.hbase.constraint.ConstraintException; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ModifyNamespaceState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.junit.After; @@ -211,7 +212,8 @@ public class TestModifyNamespaceProcedure { new ModifyNamespaceProcedure(procExec.getEnvironment(), nsd)); // Restart the executor and execute the step twice - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId); + int numberOfSteps = ModifyNamespaceState.values().length; + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); // Validate
