From b800a3ab20440fdd55947f52f3efcc689ef858d3 Mon Sep 17 00:00:00 2001 From: Salvatore Sanfilippo Date: Mon, 11 Apr 2011 16:58:47 +0200 Subject: [PATCH] a first refactoring of redis-trib.rb --- src/redis-trib.rb | 78 +++++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 29 deletions(-) diff --git a/src/redis-trib.rb b/src/redis-trib.rb index d83c9f8e..8456ed29 100755 --- a/src/redis-trib.rb +++ b/src/redis-trib.rb @@ -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