From 2dc29c2806c6b801d298df93aa1b3761f16ccf3b Mon Sep 17 00:00:00 2001 From: Duo Zhang Date: Fri, 2 Nov 2018 11:20:28 +0800 Subject: [PATCH] HBASE-21422 NPE in TestMergeTableRegionsProcedure.testMergeWithoutPONR --- .../hadoop/hbase/procedure2/ProcedureExecutor.java | 14 +++++++------- .../hbase/procedure2/ProcedureTestingUtility.java | 7 +++---- .../procedure/MasterProcedureTestingUtility.java | 8 ++++++-- .../master/procedure/TestServerCrashProcedure.java | 4 +++- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java index 9515a7a2ac..f0affd2b8a 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java @@ -92,29 +92,29 @@ public class ProcedureExecutor { * break PE having it fail at various junctures. When non-null, testing is set to an instance of * the below internal {@link Testing} class with flags set for the particular test. */ - Testing testing = null; + volatile Testing testing = null; /** * Class with parameters describing how to fail/die when in testing-context. */ public static class Testing { - protected boolean killIfHasParent = true; - protected boolean killIfSuspended = false; + protected volatile boolean killIfHasParent = true; + protected volatile boolean killIfSuspended = false; /** * Kill the PE BEFORE we store state to the WAL. Good for figuring out if a Procedure is * persisting all the state it needs to recover after a crash. */ - protected boolean killBeforeStoreUpdate = false; - protected boolean toggleKillBeforeStoreUpdate = false; + protected volatile boolean killBeforeStoreUpdate = false; + protected volatile boolean toggleKillBeforeStoreUpdate = false; /** * Set when we want to fail AFTER state has been stored into the WAL. Rarely used. HBASE-20978 * is about a case where memory-state was being set after store to WAL where a crash could * cause us to get stuck. This flag allows killing at what was a vulnerable time. */ - protected boolean killAfterStoreUpdate = false; - protected boolean toggleKillAfterStoreUpdate = false; + protected volatile boolean killAfterStoreUpdate = false; + protected volatile boolean toggleKillAfterStoreUpdate = false; protected boolean shouldKillBeforeStoreUpdate() { final boolean kill = this.killBeforeStoreUpdate; diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java index 5a7a664c00..452e08bc9c 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java @@ -133,16 +133,15 @@ public class ProcedureTestingUtility { if (actionBeforeStartWorker != null) { actionBeforeStartWorker.call(); } + if (avoidTestKillDuringRestart) { + procExecutor.testing = testing; + } if (startWorkers) { procExecutor.startWorkers(); } if (startAction != null) { startAction.call(); } - - if (avoidTestKillDuringRestart) { - procExecutor.testing = testing; - } } public static void storeRestart(ProcedureStore procStore, ProcedureStore.ProcedureLoader loader) 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 452a501c58..98c3978143 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 @@ -110,8 +110,12 @@ public class MasterProcedureTestingUtility { @Override public Void call() throws Exception { AssignmentManager am = env.getAssignmentManager(); - am.joinCluster(); - master.setInitialized(true); + try { + am.joinCluster(); + master.setInitialized(true); + } catch (Exception e) { + LOG.warn("Failed to load meta", e); + } return null; } }); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java index f36afd4acc..0e4a84b5c7 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java @@ -25,6 +25,7 @@ import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.HBaseTestingUtility; +import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.MiniHBaseCluster; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; @@ -63,7 +64,8 @@ public class TestServerCrashProcedure { private void setupConf(Configuration conf) { conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1); conf.set("hbase.balancer.tablesOnMaster", "none"); - conf.setInt("hbase.client.retries.number", 3); + conf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 3); + conf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 3); } @Before -- 2.17.1