Repository: hbase Updated Branches: refs/heads/master 5c7fa12ab -> f6ccae350
http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 a98d468..384f45a 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 @@ -228,8 +228,7 @@ public class TestAddColumnFamilyProcedure { // Restart the executor and execute the step twice int numberOfSteps = AddColumnFamilyState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps, - AddColumnFamilyState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyAddition(UTIL.getHBaseCluster().getMaster(), tableName, cf4); @@ -255,8 +254,7 @@ public class TestAddColumnFamilyProcedure { // Restart the executor and execute the step twice int numberOfSteps = AddColumnFamilyState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps, - AddColumnFamilyState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyAddition(UTIL.getHBaseCluster().getMaster(), tableName, cf5); @@ -280,9 +278,8 @@ public class TestAddColumnFamilyProcedure { nonceGroup, nonce); - int numberOfSteps = AddColumnFamilyState.values().length - 2; // failing in the middle of proc - MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps, - AddColumnFamilyState.values()); + int numberOfSteps = 1; // failing at "pre operations" + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyDeletion(UTIL.getHBaseCluster().getMaster(), tableName, cf6); http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 090a00b..c0851a2 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 @@ -93,6 +93,12 @@ public class TestCloneSnapshotProcedure { @After public void tearDown() throws Exception { resetProcExecutorTestingKillFlag(); + TableName[] tables = UTIL.getHBaseAdmin().listTableNames(); + for (int i = 0; i < tables.length; ++i) { + UTIL.deleteTable(tables[i]); + } + SnapshotTestingUtils.deleteAllSnapshots(UTIL.getHBaseAdmin()); + snapshot = null; } private void resetProcExecutorTestingKillFlag() { @@ -211,11 +217,7 @@ public class TestCloneSnapshotProcedure { // Restart the executor and execute the step twice int numberOfSteps = CloneSnapshotState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - CloneSnapshotState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateTableIsEnabled( UTIL.getHBaseCluster().getMaster(), @@ -238,16 +240,11 @@ public class TestCloneSnapshotProcedure { long procId = procExec.submitProcedure( new CloneSnapshotProcedure(procExec.getEnvironment(), htd, snapshotDesc), nonceGroup, nonce); - int numberOfSteps = CloneSnapshotState.values().length - 2; // failing in the middle of proc - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - CloneSnapshotState.values()); + int numberOfSteps = 0; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateTableDeletion( UTIL.getHBaseCluster().getMaster(), clonedTableName); - } private ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor() { http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 c01755f..cc7ed0f 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 @@ -239,11 +239,7 @@ public class TestCreateNamespaceProcedure { // Restart the executor and execute the step twice int numberOfSteps = CreateNamespaceState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - CreateNamespaceState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); // Validate the creation of namespace ProcedureTestingUtility.assertProcNotFailed(procExec, procId); @@ -265,12 +261,8 @@ public class TestCreateNamespaceProcedure { nonceGroup, nonce); - int numberOfSteps = CreateNamespaceState.values().length - 2; // failing in the middle of proc - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - CreateNamespaceState.values()); + int numberOfSteps = 0; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); // Validate the non-existence of namespace try { http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 5cec469..858d5ad 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 java.io.IOException; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -209,8 +207,7 @@ public class TestCreateTableProcedure { // Restart the executor and execute the step twice // 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, CreateTableState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, 6); MasterProcedureTestingUtility.validateTableCreation( UTIL.getHBaseCluster().getMaster(), tableName, regions, "f1", "f2"); @@ -230,66 +227,10 @@ public class TestCreateTableProcedure { testRollbackAndDoubleExecution(htd); } - @Test(timeout=90000) - public void testRollbackRetriableFailure() throws Exception { - final TableName tableName = TableName.valueOf("testRollbackRetriableFailure"); - - // create the table - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true); - - // Start the Create procedure && kill the executor - final byte[][] splitKeys = new byte[][] { - Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c") - }; - HTableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f1", "f2"); - HRegionInfo[] regions = ModifyRegionUtils.createHRegionInfos(htd, splitKeys); - long procId = procExec.submitProcedure( - new FaultyCreateTableProcedure(procExec.getEnvironment(), htd, regions), nonceGroup, nonce); - - // NOTE: the 4 (number of CreateTableState steps) is hardcoded, - // so you have to look at this test at least once when you add a new step. - MasterProcedureTestingUtility.testRollbackRetriableFailure( - procExec, procId, 4, CreateTableState.values()); - - MasterProcedureTestingUtility.validateTableDeletion( - UTIL.getHBaseCluster().getMaster(), tableName); - - // are we able to create the table after a rollback? - resetProcExecutorTestingKillFlag(); - testSimpleCreate(tableName, splitKeys); - } - private ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor() { return UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor(); } - public static class FaultyCreateTableProcedure extends CreateTableProcedure { - private int retries = 0; - - public FaultyCreateTableProcedure() { - // Required by the Procedure framework to create the procedure on replay - } - - public FaultyCreateTableProcedure(final MasterProcedureEnv env, - final HTableDescriptor hTableDescriptor, final HRegionInfo[] newRegions) - throws IOException { - super(env, hTableDescriptor, newRegions); - } - - @Override - protected void rollbackState(final MasterProcedureEnv env, final CreateTableState state) - throws IOException { - if (retries++ < 3) { - LOG.info("inject rollback failure state=" + state); - throw new IOException("injected failure number " + retries); - } else { - super.rollbackState(env, state); - retries = 0; - } - } - } - private void testRollbackAndDoubleExecution(HTableDescriptor htd) throws Exception { // create the table final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); @@ -304,10 +245,9 @@ public class TestCreateTableProcedure { long procId = procExec.submitProcedure( new CreateTableProcedure(procExec.getEnvironment(), htd, regions), nonceGroup, nonce); - // NOTE: the 4 (number of CreateTableState steps) is hardcoded, - // so you have to look at this test at least once when you add a new step. - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, procId, 4, CreateTableState.values()); + int numberOfSteps = 0; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); + TableName tableName = htd.getTableName(); MasterProcedureTestingUtility.validateTableDeletion( UTIL.getHBaseCluster().getMaster(), tableName); http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 3980274..bbae80e 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 @@ -249,8 +249,7 @@ public class TestDeleteColumnFamilyProcedure { // Restart the executor and execute the step twice int numberOfSteps = DeleteColumnFamilyState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps, - DeleteColumnFamilyState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyDeletion(UTIL.getHBaseCluster().getMaster(), tableName, cf4); @@ -276,8 +275,7 @@ public class TestDeleteColumnFamilyProcedure { // Restart the executor and execute the step twice int numberOfSteps = DeleteColumnFamilyState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps, - DeleteColumnFamilyState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyDeletion(UTIL.getHBaseCluster().getMaster(), tableName, cf5); @@ -302,53 +300,13 @@ public class TestDeleteColumnFamilyProcedure { nonceGroup, nonce); - // Failing before DELETE_COLUMN_FAMILY_DELETE_FS_LAYOUT we should trigger the rollback - // NOTE: the 1 (number before DELETE_COLUMN_FAMILY_DELETE_FS_LAYOUT step) is hardcoded, - // so you have to look at this test at least once when you add a new step. - int numberOfSteps = 1; - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - DeleteColumnFamilyState.values()); + int numberOfSteps = 1; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateTableCreation( UTIL.getHBaseCluster().getMaster(), tableName, regions, "f1", "f2", "f3", cf5); } - @Test(timeout = 60000) - public void testRollbackAndDoubleExecutionAfterPONR() throws Exception { - final TableName tableName = TableName.valueOf("testRollbackAndDoubleExecutionAfterPONR"); - final String cf5 = "cf5"; - - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - // create the table - HRegionInfo[] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, "f1", "f2", "f3", cf5); - ProcedureTestingUtility.waitNoProcedureRunning(procExec); - ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true); - - // Start the Delete procedure && kill the executor - long procId = procExec.submitProcedure( - new DeleteColumnFamilyProcedure(procExec.getEnvironment(), tableName, cf5.getBytes()), - nonceGroup, - nonce); - - // Failing after DELETE_COLUMN_FAMILY_DELETE_FS_LAYOUT we should not trigger the rollback. - // NOTE: the 4 (number of DELETE_COLUMN_FAMILY_DELETE_FS_LAYOUT + 1 step) is hardcoded, - // so you have to look at this test at least once when you add a new step. - int numberOfSteps = 4; - MasterProcedureTestingUtility.testRollbackAndDoubleExecutionAfterPONR( - procExec, - procId, - numberOfSteps, - DeleteColumnFamilyState.values()); - - MasterProcedureTestingUtility.validateColumnFamilyDeletion( - UTIL.getHBaseCluster().getMaster(), tableName, cf5); - } - private ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor() { return UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor(); } http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 4c5f87b..642b15d 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 @@ -215,11 +215,7 @@ public class TestDeleteNamespaceProcedure { // Restart the executor and execute the step twice int numberOfSteps = DeleteNamespaceState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - DeleteNamespaceState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); // Validate the deletion of namespace ProcedureTestingUtility.assertProcNotFailed(procExec, procId); @@ -237,17 +233,14 @@ public class TestDeleteNamespaceProcedure { ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true); // Start the DeleteNamespace procedure && kill the executor + LOG.info("SUBMIT DELTET"); long procId = procExec.submitProcedure( new DeleteNamespaceProcedure(procExec.getEnvironment(), namespaceName), nonceGroup, nonce); - int numberOfSteps = DeleteNamespaceState.values().length - 2; // failing in the middle of proc - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - DeleteNamespaceState.values()); + int numberOfSteps = 0; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); // Validate the namespace still exists NamespaceDescriptor createdNsDescriptor= http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 7eb12cd..c5f57fa 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 @@ -229,8 +229,7 @@ public class TestDeleteTableProcedure { // Restart the executor and execute the step twice // 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, DeleteTableState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, 6); MasterProcedureTestingUtility.validateTableDeletion( UTIL.getHBaseCluster().getMaster(), tableName); http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 eb58cd5..6ff6a16 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 @@ -196,11 +196,7 @@ public class TestDisableTableProcedure { // Restart the executor and execute the step twice int numberOfSteps = DisableTableState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - DisableTableState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), tableName); } http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDispatchMergingRegionsProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDispatchMergingRegionsProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDispatchMergingRegionsProcedure.java index 17d1e757c..69c56f7 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDispatchMergingRegionsProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDispatchMergingRegionsProcedure.java @@ -32,8 +32,6 @@ import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; -import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos; -import org.apache.hadoop.hbase.protobuf.generated.MasterProcedureProtos.CloneSnapshotState; import org.apache.hadoop.hbase.protobuf.generated.MasterProcedureProtos.DispatchMergingRegionsState; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; @@ -245,11 +243,7 @@ public class TestDispatchMergingRegionsProcedure { // Restart the executor and execute the step twice int numberOfSteps = DispatchMergingRegionsState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - DispatchMergingRegionsState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); assertEquals(2, admin.getTableRegions(tableName).size()); @@ -283,11 +277,7 @@ public class TestDispatchMergingRegionsProcedure { procExec.getEnvironment(), tableName, regionsToMerge, true)); int numberOfSteps = DispatchMergingRegionsState.values().length - 3; - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - DispatchMergingRegionsState.values()); + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); } private ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor() { http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 5c2aa29..e0709e4 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 @@ -185,11 +185,7 @@ public class TestEnableTableProcedure { // Restart the executor and execute the step twice int numberOfSteps = EnableTableState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - EnableTableState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateTableIsEnabled(UTIL.getHBaseCluster().getMaster(), tableName); } @@ -211,12 +207,8 @@ public class TestEnableTableProcedure { long procId = procExec.submitProcedure( new EnableTableProcedure(procExec.getEnvironment(), tableName, false), nonceGroup, nonce); - int numberOfSteps = EnableTableState.values().length - 2; // failing in the middle of proc - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - EnableTableState.values()); + int numberOfSteps = 1; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), tableName); } http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 e983459..27bf097 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 @@ -178,11 +178,7 @@ public class TestModifyColumnFamilyProcedure { // Restart the executor and execute the step twice int numberOfSteps = ModifyColumnFamilyState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - ModifyColumnFamilyState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyModification(UTIL.getHBaseCluster() .getMaster(), tableName, cf3, columnDescriptor); @@ -212,8 +208,7 @@ public class TestModifyColumnFamilyProcedure { // Restart the executor and execute the step twice int numberOfSteps = ModifyColumnFamilyState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps, - ModifyColumnFamilyState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); MasterProcedureTestingUtility.validateColumnFamilyModification(UTIL.getHBaseCluster() .getMaster(), tableName, cf4, columnDescriptor); @@ -241,13 +236,8 @@ public class TestModifyColumnFamilyProcedure { nonceGroup, nonce); - // Failing in the middle of proc - int numberOfSteps = ModifyColumnFamilyState.values().length - 2; - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - ModifyColumnFamilyState.values()); + int numberOfSteps = 1; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); } private ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor() { http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/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 9208df7..d6a758a 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 @@ -230,11 +230,7 @@ public class TestModifyNamespaceProcedure { // Restart the executor and execute the step twice int numberOfSteps = ModifyNamespaceState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - ModifyNamespaceState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); // Validate @@ -264,13 +260,8 @@ public class TestModifyNamespaceProcedure { nonceGroup, nonce); - // Failing in the middle of proc - int numberOfSteps = ModifyNamespaceState.values().length - 2; - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - ModifyNamespaceState.values()); + int numberOfSteps = 0; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); // Validate NamespaceDescriptor currentNsDescriptor = http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyTableProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyTableProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyTableProcedure.java index ab86eda..b19f6b8 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyTableProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestModifyTableProcedure.java @@ -256,11 +256,7 @@ public class TestModifyTableProcedure { // Restart the executor and execute the step twice int numberOfSteps = ModifyTableState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - ModifyTableState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); // Validate descriptor HTableDescriptor currentHtd = UTIL.getHBaseAdmin().getTableDescriptor(tableName); @@ -298,8 +294,7 @@ public class TestModifyTableProcedure { // Restart the executor and execute the step twice int numberOfSteps = ModifyTableState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps, - ModifyTableState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); // Validate descriptor HTableDescriptor currentHtd = UTIL.getHBaseAdmin().getTableDescriptor(tableName); @@ -334,13 +329,8 @@ public class TestModifyTableProcedure { long procId = procExec.submitProcedure( new ModifyTableProcedure(procExec.getEnvironment(), htd), nonceGroup, nonce); - // Restart the executor and rollback the step twice - int numberOfSteps = ModifyTableState.values().length - 4; // failing in the middle of proc - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - ModifyTableState.values()); + int numberOfSteps = 1; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); // cf2 should not be present MasterProcedureTestingUtility.validateTableCreation(UTIL.getHBaseCluster().getMaster(), @@ -372,58 +362,14 @@ public class TestModifyTableProcedure { new ModifyTableProcedure(procExec.getEnvironment(), htd), nonceGroup, nonce); // Restart the executor and rollback the step twice - int numberOfSteps = ModifyTableState.values().length - 4; // failing in the middle of proc - MasterProcedureTestingUtility.testRollbackAndDoubleExecution( - procExec, - procId, - numberOfSteps, - ModifyTableState.values()); + int numberOfSteps = 1; // failing at pre operation + MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps); // cf2 should not be present MasterProcedureTestingUtility.validateTableCreation(UTIL.getHBaseCluster().getMaster(), tableName, regions, "cf1"); } - @Test(timeout = 60000) - public void testRollbackAndDoubleExecutionAfterPONR() throws Exception { - final TableName tableName = TableName.valueOf("testRollbackAndDoubleExecutionAfterPONR"); - final String familyToAddName = "cf2"; - final String familyToRemove = "cf1"; - final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); - - // create the table - HRegionInfo[] regions = MasterProcedureTestingUtility.createTable( - procExec, tableName, null, familyToRemove); - UTIL.getHBaseAdmin().disableTable(tableName); - - ProcedureTestingUtility.waitNoProcedureRunning(procExec); - ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true); - - HTableDescriptor htd = new HTableDescriptor(UTIL.getHBaseAdmin().getTableDescriptor(tableName)); - htd.setCompactionEnabled(!htd.isCompactionEnabled()); - htd.addFamily(new HColumnDescriptor(familyToAddName)); - htd.removeFamily(familyToRemove.getBytes()); - htd.setRegionReplication(3); - - // Start the Modify procedure && kill the executor - long procId = procExec.submitProcedure( - new ModifyTableProcedure(procExec.getEnvironment(), htd), nonceGroup, nonce); - - // Failing after MODIFY_TABLE_DELETE_FS_LAYOUT we should not trigger the rollback. - // NOTE: the 5 (number of MODIFY_TABLE_DELETE_FS_LAYOUT + 1 step) is hardcoded, - // so you have to look at this test at least once when you add a new step. - int numberOfSteps = 5; - MasterProcedureTestingUtility.testRollbackAndDoubleExecutionAfterPONR( - procExec, - procId, - numberOfSteps, - ModifyTableState.values()); - - // "cf2" should be added and "cf1" should be removed - MasterProcedureTestingUtility.validateTableCreation(UTIL.getHBaseCluster().getMaster(), - tableName, regions, false, familyToAddName); - } - private ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor() { return UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor(); } http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.java index 31190c1..ae6d27f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.java @@ -131,8 +131,13 @@ public class TestProcedureAdmin { // Submit an un-abortable procedure long procId = procExec.submitProcedure( new DeleteTableProcedure(procExec.getEnvironment(), tableName), nonceGroup, nonce); - // Wait for one step to complete + // Wait for a couple of steps to complete (first step "prepare" is abortable) ProcedureTestingUtility.waitProcedure(procExec, procId); + for (int i = 0; i < 2; ++i) { + ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId); + ProcedureTestingUtility.restart(procExec); + ProcedureTestingUtility.waitProcedure(procExec, procId); + } boolean abortResult = procExec.abort(procId, true); assertFalse(abortResult); http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestRestoreSnapshotProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestRestoreSnapshotProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestRestoreSnapshotProcedure.java index 733dcb9..4e6303a 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestRestoreSnapshotProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestRestoreSnapshotProcedure.java @@ -261,11 +261,7 @@ public class TestRestoreSnapshotProcedure { // Restart the executor and execute the step twice int numberOfSteps = RestoreSnapshotState.values().length; - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, - procId, - numberOfSteps, - RestoreSnapshotState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, numberOfSteps); resetProcExecutorTestingKillFlag(); validateSnapshotRestore(); http://git-wip-us.apache.org/repos/asf/hbase/blob/f6ccae35/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.java index 6490a92..a7bfe18 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.java @@ -86,6 +86,8 @@ public class TestTruncateTableProcedure { @After public void tearDown() throws Exception { + final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); + assertTrue("expected executor to be running", procExec.isRunning()); ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(getMasterProcedureExecutor(), false); for (HTableDescriptor htd: UTIL.getHBaseAdmin().listTables()) { LOG.info("Tear down, remove table=" + htd.getTableName()); @@ -223,8 +225,7 @@ public class TestTruncateTableProcedure { // Restart the executor and execute the step twice // NOTE: the 7 (number of TruncateTableState steps) is hardcoded, // so you have to look at this test at least once when you add a new step. - MasterProcedureTestingUtility.testRecoveryAndDoubleExecution( - procExec, procId, 7, TruncateTableState.values()); + MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, 7); ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false); UTIL.waitUntilAllRegionsAssigned(tableName);