]> git.saurik.com Git - redis.git/commitdiff
redis-trib cluster check command: check that all the 4096 slots are covered
authorantirez <antirez@gmail.com>
Thu, 29 Sep 2011 10:50:46 +0000 (12:50 +0200)
committerantirez <antirez@gmail.com>
Thu, 29 Sep 2011 10:50:46 +0000 (12:50 +0200)
src/redis-trib.rb

index c8daac3767d8dd5425eb733589a1df4caa634fa0..daa5a78a8f54db394a5217f185625424b232434c 100755 (executable)
@@ -26,6 +26,14 @@ class ClusterNode
         @friends = []
     end
 
         @friends = []
     end
 
+    def friends
+        @friends
+    end
+
+    def slots 
+        @slots
+    end
+
     def to_s
         "#{@host}:#{@port}"
     end
     def to_s
         "#{@host}:#{@port}"
     end
@@ -187,6 +195,16 @@ class RedisTrib
     def check_cluster
         puts "Performing Cluster Check (using node #{@nodes[0]})"
         show_nodes
     def check_cluster
         puts "Performing Cluster Check (using node #{@nodes[0]})"
         show_nodes
+        # Check if all the slots are covered
+        slots = {}
+        @nodes.each{|n|
+            slots = slots.merge(n.slots)
+        }
+        if slots.length == 4096
+            puts "[OK] All 4096 slots covered."
+        else
+            puts "[ERR] Not all 4096 slots are covered by nodes."
+        end
     end
 
     def alloc_slots
     end
 
     def alloc_slots
@@ -241,8 +259,14 @@ class RedisTrib
         node = ClusterNode.new(ARGV[1])
         node.connect(:abort => true)
         node.assert_cluster
         node = ClusterNode.new(ARGV[1])
         node.connect(:abort => true)
         node.assert_cluster
-        node.load_info
+        node.load_info(:getfriends => true)
         add_node(node)
         add_node(node)
+        node.friends.each{|f|
+            fnode = ClusterNode.new(f[:addr])
+            fnode.connect()
+            fnode.load_info()
+            add_node(fnode)
+        }
         check_cluster
     end
 
         check_cluster
     end