Skip to content

Commit cb04c6c

Browse files
authored
HBASE-23035 Retain region to the last RegionServer make the failover slower (#631)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
1 parent 3ae353c commit cb04c6c

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,11 @@ public void reportTransition(MasterProcedureEnv env, RegionStateNode regionNode,
398398
// Should be called with RegionStateNode locked
399399
public void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode,
400400
ServerName serverName) throws IOException {
401+
// force to assign to a new candidate server
402+
// TODO: the forceNewPlan flag not be persistent so if master crash then the flag will be lost.
403+
// But assign to old server is not big deal because it not effect correctness.
404+
// See HBASE-23035 for more details.
405+
forceNewPlan = true;
401406
if (remoteProc != null) {
402407
// this means we are waiting for the sub procedure, so wake it up
403408
remoteProc.serverCrashed(env, regionNode, serverName);
@@ -545,8 +550,13 @@ public enum TransitionType {
545550
// anything. See the comment in executeFromState to find out why we need this assumption.
546551
public static TransitRegionStateProcedure assign(MasterProcedureEnv env, RegionInfo region,
547552
@Nullable ServerName targetServer) {
548-
return setOwner(env,
549-
new TransitRegionStateProcedure(env, region, targetServer, false, TransitionType.ASSIGN));
553+
return assign(env, region, false, targetServer);
554+
}
555+
556+
public static TransitRegionStateProcedure assign(MasterProcedureEnv env, RegionInfo region,
557+
boolean forceNewPlan, @Nullable ServerName targetServer) {
558+
return setOwner(env, new TransitRegionStateProcedure(env, region, targetServer, forceNewPlan,
559+
TransitionType.ASSIGN));
550560
}
551561

552562
public static TransitRegionStateProcedure unassign(MasterProcedureEnv env, RegionInfo region) {

hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,9 @@ private void assignRegions(MasterProcedureEnv env, List<RegionInfo> regions) thr
464464
TableState.State.DISABLING, TableState.State.DISABLED)) {
465465
continue;
466466
}
467-
TransitRegionStateProcedure proc = TransitRegionStateProcedure.assign(env, region, null);
467+
// force to assign to a new candidate server, see HBASE-23035 for more details.
468+
TransitRegionStateProcedure proc =
469+
TransitRegionStateProcedure.assign(env, region, true, null);
468470
regionNode.setProcedure(proc);
469471
addChildProcedure(proc);
470472
}

0 commit comments

Comments
 (0)