Repository: hbase Updated Branches: refs/heads/branch-2.0 fef4fb36b -> 9cc5f86e8
HBASE-21288 HostingServer in UnassignProcedure is not accurate Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/9cc5f86e Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/9cc5f86e Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/9cc5f86e Branch: refs/heads/branch-2.0 Commit: 9cc5f86e8fa4fe9fbf25844ddd5e52acb7d7df54 Parents: fef4fb3 Author: Allan Yang <[email protected]> Authored: Thu Oct 18 20:47:27 2018 +0800 Committer: Allan Yang <[email protected]> Committed: Thu Oct 18 20:47:27 2018 +0800 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/master/HMaster.java | 15 +++++++++++++++ .../hbase/master/assignment/UnassignProcedure.java | 16 +++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/9cc5f86e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index a8ba3af..67152e2 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -71,6 +71,7 @@ import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.MetaTableAccessor; import org.apache.hadoop.hbase.NamespaceDescriptor; import org.apache.hadoop.hbase.PleaseHoldException; +import org.apache.hadoop.hbase.ServerMetrics; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableDescriptors; import org.apache.hadoop.hbase.TableName; @@ -1552,6 +1553,20 @@ public class HMaster extends HRegionServer implements MasterServices { this.serverManager.getDeadServers()); return false; } + Map<ServerName, ServerMetrics> onlineServers = serverManager.getOnlineServers(); + int regionNotOnOnlineServer = 0; + for (RegionState regionState : assignmentManager.getRegionStates().getRegionStates()) { + if (regionState.isOpened() && !onlineServers + .containsKey(regionState.getServerName())) { + LOG.warn("{} 's server is not in the online server list.", regionState); + regionNotOnOnlineServer++; + } + } + if (regionNotOnOnlineServer > 0) { + LOG.info("Not running balancer because {} regions found not on an online server", + regionNotOnOnlineServer); + return false; + } if (this.cpHost != null) { try { http://git-wip-us.apache.org/repos/asf/hbase/blob/9cc5f86e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java ---------------------------------------------------------------------- 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 589b732..23b2de7 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 @@ -77,6 +77,8 @@ public class UnassignProcedure extends RegionTransitionProcedure { /** * Where to send the unassign RPC. + * this one may not accurate since another RTP may change this location for + * the region. The hostingServer will be updated in updateTransition */ protected volatile ServerName hostingServer; /** @@ -198,6 +200,13 @@ public class UnassignProcedure extends RegionTransitionProcedure { return false; } + if (regionNode.getRegionLocation() != null && !regionNode + .getRegionLocation().equals(hostingServer)) { + LOG.info("HostingServer changed from {} to {} for {}", hostingServer, + regionNode.getRegionLocation(), this); + this.hostingServer = regionNode.getRegionLocation(); + } + // Mark the region as CLOSING. env.getAssignmentManager().markRegionAsClosing(regionNode); @@ -357,7 +366,12 @@ public class UnassignProcedure extends RegionTransitionProcedure { @Override public ServerName getServer(final MasterProcedureEnv env) { - return this.hostingServer; + RegionStateNode node = + env.getAssignmentManager().getRegionStates().getRegionStateNode(this.getRegionInfo()); + if (node == null) { + return null; + } + return node.getRegionLocation(); } @Override
