You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ec...@apache.org on 2014/09/18 17:54:25 UTC
git commit: HBASE-12013 Support multiple regionservers per host in
region_mover.rb
Repository: hbase
Updated Branches:
refs/heads/master 681316742 -> b26ec4e3d
HBASE-12013 Support multiple regionservers per host in region_mover.rb
Signed-off-by: Elliott Clark <ec...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b26ec4e3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b26ec4e3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b26ec4e3
Branch: refs/heads/master
Commit: b26ec4e3df509f7aa72aaa85f87cbe3a6e265298
Parents: 6813167
Author: Patrick White <pw...@fb.com>
Authored: Wed Sep 17 16:24:53 2014 -0700
Committer: Elliott Clark <ec...@apache.org>
Committed: Thu Sep 18 08:48:15 2014 -0700
----------------------------------------------------------------------
bin/region_mover.rb | 68 ++++++++++++++++++++++++------------------------
1 file changed, 34 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/b26ec4e3/bin/region_mover.rb
----------------------------------------------------------------------
diff --git a/bin/region_mover.rb b/bin/region_mover.rb
index 952fb53..9c09819 100644
--- a/bin/region_mover.rb
+++ b/bin/region_mover.rb
@@ -20,8 +20,6 @@
# not move a new region until successful confirm of region loading in new
# location. Presumes balancer is disabled when we run (not harmful if its
# on but this script and balancer will end up fighting each other).
-# Does not work for case of multiple regionservers all running on the
-# one node.
require 'optparse'
require File.join(File.dirname(__FILE__), 'thread-pool')
include Java
@@ -194,15 +192,9 @@ def move(admin, r, newServer, original)
java.lang.String.format("%.3f", (Time.now - start)))
end
-# Return the hostname portion of a servername (all up to first ',')
-def getHostnamePortFromServerName(serverName)
- parts = serverName.split(',')
- return parts[0] + ":" + parts[1]
-end
-
-# Return the hostname:port out of a servername (all up to first ',')
-def getHostnameFromServerName(serverName)
- return serverName.split(',')[0]
+# Return the hostname:port out of a servername (all up to second ',')
+def getHostPortFromServerName(serverName)
+ return serverName.split(',')[0..1]
end
# Return array of servernames where servername is hostname+port+startcode
@@ -218,16 +210,17 @@ end
# Remove the servername whose hostname portion matches from the passed
# array of servers. Returns as side-effect the servername removed.
-def stripServer(servers, hostname)
+def stripServer(servers, hostname, port)
count = servers.length
servername = nil
for server in servers
- if getHostnameFromServerName(server) == hostname
+ hostFromServerName, portFromServerName = getHostPortFromServerName(server)
+ if hostFromServerName == hostname and portFromServerName == port
servername = servers.delete(server)
end
end
# Check server to exclude is actually present
- raise RuntimeError, "Server %s not online" % hostname unless servers.length < count
+ raise RuntimeError, "Server %s:%d not online" % [hostname, port] unless servers.length < count
return servername
end
@@ -235,22 +228,25 @@ end
# matches from the passed array of servers.
def stripExcludes(servers, excludefile)
excludes = readExcludes(excludefile)
- servers = servers.find_all{|server| !excludes.contains(getHostnameFromServerName(server)) }
+ servers = servers.find_all{|server|
+ !excludes.contains(getHostPortFromServerName(server).join(":"))
+ }
# return updated servers list
return servers
end
-# Return servername that matches passed hostname
-def getServerName(servers, hostname)
+# Return servername that matches passed hostname and port
+def getServerName(servers, hostname, port)
servername = nil
for server in servers
- if getHostnameFromServerName(server) == hostname
+ hostFromServerName, portFromServerName = getHostPortFromServerName(server)
+ if hostFromServerName == hostname and portFromServerName == port
servername = server
break
end
end
- raise ArgumentError, "Server %s not online" % hostname unless servername
+ raise ArgumentError, "Server %s:%d not online" % [hostname, port] unless servername
return servername
end
@@ -321,19 +317,21 @@ def readFile(filename)
return regions
end
-# Move regions off the passed hostname
-def unloadRegions(options, hostname)
+# Move regions off the passed hostname:port
+def unloadRegions(options, hostname, port)
# Get configuration
config = getConfiguration()
# Clean up any old files.
- filename = getFilename(options, hostname)
+ filename = getFilename(options, hostname, port)
deleteFile(filename)
# Get an admin instance
admin = HBaseAdmin.new(config)
+ port = config.getInt(HConstants::REGIONSERVER_PORT, HConstants::DEFAULT_REGIONSERVER_PORT) \
+ unless port
servers = getServers(admin)
# Remove the server we are unloading from from list of servers.
# Side-effect is the servername that matches this hostname
- servername = stripServer(servers, hostname)
+ servername = stripServer(servers, hostname, port)
# Remove the servers in our exclude list from list of servers.
servers = stripExcludes(servers, options[:excludesFile])
@@ -379,12 +377,14 @@ def unloadRegions(options, hostname)
end
# Move regions to the passed hostname
-def loadRegions(options, hostname)
+def loadRegions(options, hostname, port)
# Get configuration
config = getConfiguration()
# Get an admin instance
admin = HBaseAdmin.new(config)
- filename = getFilename(options, hostname)
+ port = config.getInt(HConstants::REGIONSERVER_PORT, HConstants::DEFAULT_REGIONSERVER_PORT) \
+ unless port
+ filename = getFilename(options, hostname, port)
regions = readFile(filename)
return if regions.isEmpty()
servername = nil
@@ -394,9 +394,9 @@ def loadRegions(options, hostname)
while Time.now < maxWait
servers = getServers(admin)
begin
- servername = getServerName(servers, hostname)
+ servername = getServerName(servers, hostname, port)
rescue ArgumentError => e
- $LOG.info("hostname=" + hostname.to_s + " is not up yet, waiting");
+ $LOG.info("hostname=" + hostname.to_s + ":" + port.to_s + " is not up yet, waiting");
end
break if servername
sleep 0.5
@@ -458,10 +458,10 @@ def readExcludes(filename)
return excludes
end
-def getFilename(options, targetServer)
+def getFilename(options, targetServer, port)
filename = options[:file]
if not filename
- filename = "/tmp/" + ENV['USER'] + targetServer
+ filename = "/tmp/" + ENV['USER'] + targetServer + ":" + port
end
return filename
end
@@ -470,11 +470,11 @@ end
# Do command-line parsing
options = {}
optparse = OptionParser.new do |opts|
- opts.banner = "Usage: #{NAME}.rb [options] load|unload <hostname>"
+ opts.banner = "Usage: #{NAME}.rb [options] load|unload [<hostname>|<hostname:port>]"
opts.separator 'Load or unload regions by moving one at a time'
options[:file] = nil
options[:maxthreads] = 1
- opts.on('-f', '--filename=FILE', 'File to save regions list into unloading, or read from loading; default /tmp/<hostname>') do |file|
+ opts.on('-f', '--filename=FILE', 'File to save regions list into unloading, or read from loading; default /tmp/<hostname:port>') do |file|
options[:file] = file
end
opts.on('-h', '--help', 'Display usage information') do
@@ -499,7 +499,7 @@ if ARGV.length < 2
puts optparse
exit 1
end
-hostname = ARGV[1]
+hostname, port = ARGV[1].split(":")
if not hostname
opts optparse
exit 2
@@ -508,9 +508,9 @@ end
$LOG = configureLogging(options)
case ARGV[0]
when 'load'
- loadRegions(options, hostname)
+ loadRegions(options, hostname, port)
when 'unload'
- unloadRegions(options, hostname)
+ unloadRegions(options, hostname, port)
else
puts optparse
exit 3