Repository: hbase Updated Branches: refs/heads/branch-2.0 19b722e84 -> 5c130fc75
HBASE-21113 Apply the branch-2 version of HBASE-21095, The timeout retry logic for several procedures are broken after master restarts I applied the patch HBASE-21095 and then reverted it so could apply the patch as HBASE-21113 (by reverting the HBASE-21095 revert but pushing with this message!). Revert "Revert "HBASE-21095 The timeout retry logic for several procedures are broken after master restarts"" This reverts commit 19b722e8412b48d6318a9599b702995e99099d7e. Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5c130fc7 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5c130fc7 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5c130fc7 Branch: refs/heads/branch-2.0 Commit: 5c130fc75705525f75d519481b0c5dbc533a8082 Parents: 19b722e Author: Michael Stack <st...@apache.org> Authored: Fri Aug 24 12:36:25 2018 -0700 Committer: Michael Stack <st...@apache.org> Committed: Fri Aug 24 12:36:25 2018 -0700 ---------------------------------------------------------------------- .../assignment/RegionTransitionProcedure.java | 11 ++++------- .../assignment/TestUnexpectedStateException.java | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/5c130fc7/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java index de39f4c..c9d141a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java @@ -371,12 +371,9 @@ public abstract class RegionTransitionProcedure LOG.warn("Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " + "by other Procedure or operator intervention", backoff / 1000, this, regionNode.toShortString(), e); - getRegionState(env).getProcedureEvent().suspend(); - if (getRegionState(env).getProcedureEvent().suspendIfNotReady(this)) { - setTimeout(Math.toIntExact(backoff)); - setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT); - throw new ProcedureSuspendedException(); - } + setTimeout(Math.toIntExact(backoff)); + setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT); + throw new ProcedureSuspendedException(); } return new Procedure[] {this}; @@ -394,7 +391,7 @@ public abstract class RegionTransitionProcedure @Override protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) { setState(ProcedureProtos.ProcedureState.RUNNABLE); - getRegionState(env).getProcedureEvent().wake(env.getProcedureScheduler()); + env.getProcedureScheduler().addFront(this); return false; // 'false' means that this procedure handled the timeout } http://git-wip-us.apache.org/repos/asf/hbase/blob/5c130fc7/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestUnexpectedStateException.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestUnexpectedStateException.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestUnexpectedStateException.java index 0f62f8e..16648c0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestUnexpectedStateException.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestUnexpectedStateException.java @@ -24,17 +24,15 @@ import java.util.Iterator; import java.util.List; import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.HBaseTestingUtility; +import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.RegionInfo; +import org.apache.hadoop.hbase.master.HMaster; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Threads; -import org.apache.hbase.thirdparty.com.google.gson.JsonArray; -import org.apache.hbase.thirdparty.com.google.gson.JsonElement; -import org.apache.hbase.thirdparty.com.google.gson.JsonObject; -import org.apache.hbase.thirdparty.com.google.gson.JsonParser; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -46,6 +44,11 @@ import org.junit.rules.TestName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.hbase.thirdparty.com.google.gson.JsonArray; +import org.apache.hbase.thirdparty.com.google.gson.JsonElement; +import org.apache.hbase.thirdparty.com.google.gson.JsonObject; +import org.apache.hbase.thirdparty.com.google.gson.JsonParser; + /** * Tests for HBASE-18408 "AM consumes CPU and fills up the logs really fast when there is no RS to * assign". If an {@link org.apache.hadoop.hbase.exceptions.UnexpectedStateException}, we'd spin on @@ -66,6 +69,8 @@ public class TestUnexpectedStateException { @BeforeClass public static void beforeClass() throws Exception { + TEST_UTIL.getConfiguration().setBoolean("hbase.localcluster.assign.random.ports", false); + TEST_UTIL.getConfiguration().setInt(HConstants.MASTER_INFO_PORT, 50655); TEST_UTIL.startMiniCluster(); } @@ -139,6 +144,11 @@ public class TestUnexpectedStateException { } Thread.sleep(1000); } + TEST_UTIL.getMiniHBaseCluster().stopMaster(0).join(); + HMaster master = TEST_UTIL.getMiniHBaseCluster().startMaster().getMaster(); + TEST_UTIL.waitFor(30000, () -> master.isInitialized()); + am = master.getAssignmentManager(); + rsn = am.getRegionStates().getRegionStateNode(region); am.markRegionAsOpened(rsn); t.join(); }