This is an automated email from the ASF dual-hosted git repository.

reidchan pushed a commit to branch branch-1.4
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-1.4 by this push:
     new 3c4d591  HBASE-22658 region_mover.rb should choose same rsgroup 
servers as target servers
3c4d591 is described below

commit 3c4d5911a1cf127056d6c695fe787d8e7eb071a6
Author: liang.feng <fengliang...@ke.com>
AuthorDate: Tue Jul 16 22:15:40 2019 +0800

    HBASE-22658 region_mover.rb should choose same rsgroup servers as target 
servers
    
    Co-authored-by: Reid Chan <reidc...@apache.org>
    Signed-off-by: stack <st...@apache.org>
    Signed-off-by: Andrew Purtell <apurt...@apache.org>
    Signed-off-by: Reid Chan <reidc...@apache.org>
---
 bin/region_mover.rb | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/bin/region_mover.rb b/bin/region_mover.rb
index 03b7c01..3e4f020 100644
--- a/bin/region_mover.rb
+++ b/bin/region_mover.rb
@@ -41,6 +41,10 @@ import org.apache.commons.logging.LogFactory
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil
 import org.apache.hadoop.hbase.ServerName
 import org.apache.hadoop.hbase.HRegionInfo
+import org.apache.hadoop.hbase.rsgroup.RSGroupAdmin
+import org.apache.hadoop.hbase.rsgroup.RSGroupAdminClient
+import org.apache.hadoop.hbase.client.ConnectionFactory
+import org.apache.hadoop.hbase.net.Address
 
 # Name of this script
 NAME = "region_mover"
@@ -299,6 +303,17 @@ def unloadRegions(options, hostname, port)
   # Get an admin instance
   admin = HBaseAdmin.new(config)
   servers = getServers(admin)
+  # If rsgroup enable, get servers belongs to the same rsgroup as given server
+  if isEnableRSGroup(admin)
+    $LOG.info("RegionServer group is enabled.")
+    begin
+      conn = ConnectionFactory.createConnection(config)
+      rsgroupAdmin = RSGroupAdminClient.new(conn)
+      servers = getSameRSGroupServers(servers, rsgroupAdmin, hostname, port)
+    ensure
+      conn.close()
+    end
+  end
   # Remove the server we are unloading from from list of servers.
   # Side-effect is the servername that matches this hostname 
   servername = stripServer(servers, hostname, port)
@@ -432,6 +447,29 @@ def getFilename(options, targetServer, port)
   return filename
 end
 
+# Get servers in the same regionserver group as the given server
+def getSameRSGroupServers(servers, rsgroupAdmin, hostname, port)
+  results = []
+  rsgroup = rsgroupAdmin.getRSGroupOfServer(Address.fromParts(hostname,
+    java.lang.Integer.parseInt(port)))
+  # rsgroup must be default or others, can't be nil
+  $LOG.info("Getting servers list from group: " + rsgroup.getName())
+  rsservers = rsgroup.getServers()
+  servers.each do |server|
+    servername = ServerName.parseServerName(server)
+    tmp = Address.fromParts(servername.getHostname(), servername.getPort())
+    if rsservers.contains(tmp)
+      results << servername.getServerName()
+    end
+  end
+  return results
+end
+
+# Determine whether rsgroup has been enabled
+def isEnableRSGroup(admin)
+  coprocessors = java.util.Arrays.asList(admin.getMasterCoprocessors());
+  return coprocessors.contains("RSGroupAdminEndpoint")
+end
 
 # Do command-line parsing
 options = {}

Reply via email to