HBASE-22658 region_mover.rb should choose same rsgroup servers as target servers
Co-authored-by: Reid Chan <reidchan@apache.org> Signed-off-by: stack <stack@apache.org> Signed-off-by: Andrew Purtell <apurtell@apache.org> Signed-off-by: Reid Chan <reidchan@apache.org>
This commit is contained in:
parent
2be03e130b
commit
1930856da6
|
@ -41,6 +41,10 @@ import org.apache.commons.logging.LogFactory
|
||||||
import org.apache.hadoop.hbase.protobuf.ProtobufUtil
|
import org.apache.hadoop.hbase.protobuf.ProtobufUtil
|
||||||
import org.apache.hadoop.hbase.ServerName
|
import org.apache.hadoop.hbase.ServerName
|
||||||
import org.apache.hadoop.hbase.HRegionInfo
|
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 of this script
|
||||||
NAME = "region_mover"
|
NAME = "region_mover"
|
||||||
|
@ -299,6 +303,17 @@ def unloadRegions(options, hostname, port)
|
||||||
# Get an admin instance
|
# Get an admin instance
|
||||||
admin = HBaseAdmin.new(config)
|
admin = HBaseAdmin.new(config)
|
||||||
servers = getServers(admin)
|
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.
|
# Remove the server we are unloading from from list of servers.
|
||||||
# Side-effect is the servername that matches this hostname
|
# Side-effect is the servername that matches this hostname
|
||||||
servername = stripServer(servers, hostname, port)
|
servername = stripServer(servers, hostname, port)
|
||||||
|
@ -432,6 +447,29 @@ def getFilename(options, targetServer, port)
|
||||||
return filename
|
return filename
|
||||||
end
|
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
|
# Do command-line parsing
|
||||||
options = {}
|
options = {}
|
||||||
|
|
Loading…
Reference in New Issue