From b8184c0c3b37a514b2d4d2b8a4f55364c2f7afe5 Mon Sep 17 00:00:00 2001 From: Toshihiro Suzuki Date: Thu, 22 Feb 2018 17:45:51 +0900 Subject: [PATCH] HBASE-20049 Region replicas of SPLIT and MERGED regions are kept in in-memory states until restarting master --- .../hbase/master/assignment/UnassignProcedure.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java index 8536e77..4235e1f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java @@ -25,7 +25,9 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.NotServingRegionException; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.client.RegionInfo; +import org.apache.hadoop.hbase.client.RegionReplicaUtil; import org.apache.hadoop.hbase.exceptions.UnexpectedStateException; +import org.apache.hadoop.hbase.favored.FavoredNodesManager; import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException; import org.apache.hadoop.hbase.master.RegionState.State; import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode; @@ -37,6 +39,7 @@ import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer; import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation; import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException; import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException; +import org.apache.hbase.thirdparty.com.google.common.collect.Lists; import org.apache.yetus.audience.InterfaceAudience; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -190,7 +193,19 @@ public class UnassignProcedure extends RegionTransitionProcedure { @Override protected void finishTransition(final MasterProcedureEnv env, final RegionStateNode regionNode) throws IOException { - env.getAssignmentManager().markRegionAsClosed(regionNode); + AssignmentManager am = env.getAssignmentManager(); + RegionInfo regionInfo = getRegionInfo(); + + if (RegionReplicaUtil.isDefaultReplica(regionInfo)) { + am.markRegionAsClosed(regionNode); + } else { + am.getRegionStates().deleteRegion(regionInfo); + env.getMasterServices().getServerManager().removeRegion(regionInfo); + FavoredNodesManager fnm = env.getMasterServices().getFavoredNodesManager(); + if (fnm != null) { + fnm.deleteFavoredNodesForRegions(Lists.newArrayList(regionInfo)); + } + } } @Override -- 2.10.1 (Apple Git-78)