redis-trib: reshard command work in progress

This commit is contained in:
antirez 2011-09-29 16:06:49 +02:00
parent 9514aa3251
commit 85b514d165

View File

@ -164,7 +164,7 @@ class ClusterNode
x.count == 1 ? x.first.to_s : "#{x.first}-#{x.last}" x.count == 1 ? x.first.to_s : "#{x.first}-#{x.last}"
}.join(",") }.join(",")
"[#{@info[:cluster_state].upcase}] #{self.to_s.ljust(25)} slots:#{slots}" "[#{@info[:cluster_state].upcase}] #{self.info[:name]} #{self.to_s.ljust(25)} slots:#{slots}"
end end
def info def info
@ -197,8 +197,16 @@ class RedisTrib
@nodes << node @nodes << node
end end
def get_node_by_name(name)
@nodes.each{|n|
return n if n.info[:name] == name.downcase
}
return nil
end
def check_cluster def check_cluster
puts "Performing Cluster Check (using node #{@nodes[0]})" puts "Performing Cluster Check (using node #{@nodes[0]})"
errors = []
show_nodes show_nodes
# Check if all the slots are covered # Check if all the slots are covered
slots = {} slots = {}
@ -208,8 +216,10 @@ class RedisTrib
if slots.length == 4096 if slots.length == 4096
puts "[OK] All 4096 slots covered." puts "[OK] All 4096 slots covered."
else else
puts "[ERR] Not all 4096 slots are covered by nodes." errors << "[ERR] Not all 4096 slots are covered by nodes."
puts errors[-1]
end end
return errors
end end
def alloc_slots def alloc_slots
@ -279,6 +289,20 @@ class RedisTrib
check_cluster check_cluster
end end
def reshard_cluster_cmd
load_cluster_info_from_node(ARGV[1])
errors = check_cluster
if errors.length != 0
puts "Please fix your cluster problems before resharding."
exit 1
end
many = 0
while many <= 0 or many > 4096
print "How many slots do you want to move? "
many = STDIN.gets.to_i
end
end
def create_cluster_cmd def create_cluster_cmd
puts "Creating cluster" puts "Creating cluster"
ARGV[1..-1].each{|n| ARGV[1..-1].each{|n|
@ -302,7 +326,8 @@ end
COMMANDS={ COMMANDS={
"create" => ["create_cluster_cmd", -2, "host1:port host2:port ... hostN:port"], "create" => ["create_cluster_cmd", -2, "host1:port host2:port ... hostN:port"],
"check" => ["check_cluster_cmd", 2, "host:port"] "check" => ["check_cluster_cmd", 2, "host:port"],
"reshard" => ["reshard_cluster_cmd", 2, "host:port"]
} }
# Sanity check # Sanity check