You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2019/09/21 13:26:56 UTC

[hbase] branch branch-2.2 updated: HBASE-23035 Retain region to the last RegionServer make the failover slower (#631)

This is an automated email from the ASF dual-hosted git repository.

zghao pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.2 by this push:
     new 77c74ad  HBASE-23035 Retain region to the last RegionServer make the failover slower (#631)
77c74ad is described below

commit 77c74ade90f0b4a78050e3623d561279d9f5688d
Author: Guanghao Zhang <zg...@apache.org>
AuthorDate: Sat Sep 21 21:11:05 2019 +0800

    HBASE-23035 Retain region to the last RegionServer make the failover slower (#631)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
---
 .../master/assignment/TransitRegionStateProcedure.java     | 14 ++++++++++++--
 .../hbase/master/procedure/ServerCrashProcedure.java       |  4 +++-
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.java
index 6bf5dc2..ae2c993 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.java
@@ -398,6 +398,11 @@ public class TransitRegionStateProcedure
   // Should be called with RegionStateNode locked
   public void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode,
       ServerName serverName) throws IOException {
+    // force to assign to a new candidate server
+    // TODO: the forceNewPlan flag not be persistent so if master crash then the flag will be lost.
+    // But assign to old server is not big deal because it not effect correctness.
+    // See HBASE-23035 for more details.
+    forceNewPlan = true;
     if (remoteProc != null) {
       // this means we are waiting for the sub procedure, so wake it up
       remoteProc.serverCrashed(env, regionNode, serverName);
@@ -545,8 +550,13 @@ public class TransitRegionStateProcedure
   // anything. See the comment in executeFromState to find out why we need this assumption.
   public static TransitRegionStateProcedure assign(MasterProcedureEnv env, RegionInfo region,
       @Nullable ServerName targetServer) {
-    return setOwner(env,
-      new TransitRegionStateProcedure(env, region, targetServer, false, TransitionType.ASSIGN));
+    return assign(env, region, false, targetServer);
+  }
+
+  public static TransitRegionStateProcedure assign(MasterProcedureEnv env, RegionInfo region,
+      boolean forceNewPlan, @Nullable ServerName targetServer) {
+    return setOwner(env, new TransitRegionStateProcedure(env, region, targetServer, forceNewPlan,
+        TransitionType.ASSIGN));
   }
 
   public static TransitRegionStateProcedure unassign(MasterProcedureEnv env, RegionInfo region) {
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
index 292fa45..9d06e6f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
@@ -464,7 +464,9 @@ public class ServerCrashProcedure
             TableState.State.DISABLING, TableState.State.DISABLED)) {
             continue;
           }
-          TransitRegionStateProcedure proc = TransitRegionStateProcedure.assign(env, region, null);
+          // force to assign to a new candidate server, see HBASE-23035 for more details.
+          TransitRegionStateProcedure proc =
+              TransitRegionStateProcedure.assign(env, region, true, null);
           regionNode.setProcedure(proc);
           addChildProcedure(proc);
         }