You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by al...@apache.org on 2018/10/18 12:47:54 UTC
hbase git commit: HBASE-21288 HostingServer in UnassignProcedure is
not accurate
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 <al...@apache.org>
Authored: Thu Oct 18 20:47:27 2018 +0800
Committer: Allan Yang <al...@apache.org>
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