]> git.saurik.com Git - redis.git/commitdiff
redis-trib: reshard command work in progress
authorantirez <antirez@gmail.com>
Thu, 29 Sep 2011 14:06:49 +0000 (16:06 +0200)
committerantirez <antirez@gmail.com>
Thu, 29 Sep 2011 14:06:49 +0000 (16:06 +0200)
src/redis-trib.rb

index ac490d28212c696d2fede36f82ae4a4e143851d9..6c6ba1a873ba942dbbb5accd223aac9aa88b857f 100755 (executable)
@@ -164,7 +164,7 @@ class ClusterNode
             x.count == 1 ? x.first.to_s : "#{x.first}-#{x.last}"
         }.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
 
     def info
@@ -197,8 +197,16 @@ class RedisTrib
         @nodes << node
     end
 
+    def get_node_by_name(name)
+        @nodes.each{|n|
+            return n if n.info[:name] == name.downcase
+        }
+        return nil
+    end
+
     def check_cluster
         puts "Performing Cluster Check (using node #{@nodes[0]})"
+        errors = []
         show_nodes
         # Check if all the slots are covered
         slots = {}
@@ -208,8 +216,10 @@ class RedisTrib
         if slots.length == 4096
             puts "[OK] All 4096 slots covered."
         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
+        return errors
     end
 
     def alloc_slots
@@ -279,6 +289,20 @@ class RedisTrib
         check_cluster
     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
         puts "Creating cluster"
         ARGV[1..-1].each{|n|
@@ -302,7 +326,8 @@ end
 
 COMMANDS={
     "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