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