a first refactoring of redis-trib.rb

This commit is contained in:
Salvatore Sanfilippo 2011-04-11 16:58:47 +02:00
parent 407798c1e1
commit b800a3ab20

View File

@ -3,12 +3,52 @@
require 'rubygems'
require 'redis'
class RedisTrib
def xputs(s)
printf s
STDOUT.flush
def xputs(s)
printf s
STDOUT.flush
end
class ClusterNode
def initialize(addr)
s = addr.split(":")
if s.length != 2
puts "Invalid node name #{node}"
exit 1
end
@host = s[0]
@port = s[1]
end
def to_s
"#{@host}:#{@port}"
end
def connect
xputs "Connecting to node #{self}: "
begin
@r = Redis.new(:host => @ost, :port => @port)
@r.ping
rescue
puts "ERROR"
puts "Sorry, can't connect to node #{self}"
end
puts "OK"
end
def assert_cluster
info = @r.info
if !info["cluster_enabled"] || info["cluster_enabled"].to_i == 0
puts "Error: Node #{self} is not configured as a cluster node."
exit 1
end
end
def r
@r
end
end
class RedisTrib
def check_arity(req_args, num_args)
if ((req_args > 0 and num_args != req_args) ||
(req_args < 0 and num_args < req_args.abs))
@ -17,33 +57,13 @@ class RedisTrib
end
end
def parse_node(node)
s = node.split(":")
if s.length != 2
puts "Invalid node name #{node}"
exit 1
end
return {:host => s[0], :port => s[1].to_i}
end
def connect_to_node(naddr)
xputs "Connecting to node #{naddr[:host]}:#{naddr[:port]}: "
begin
r = Redis.new(:host => naddr[:host], :port => naddr[:port])
r.ping
rescue
puts "ERROR"
puts "Sorry, can't connect to node #{naddr[:host]}:#{naddr[:port]}"
exit 1
end
puts "OK"
end
def create_cluster
puts "Creating cluster"
ARGV[1..-1].each{|node|
naddr = parse_node(node)
r = connect_to_node(naddr)
ARGV[1..-1].each{|n|
node = ClusterNode.new(n)
node.connect
node.assert_cluster
# node.assert_empty
}
end
end