From df32eb68271976662ffab503d630362a35ae48ff Mon Sep 17 00:00:00 2001
From: antirez <antirez@gmail.com>
Date: Tue, 11 Mar 2014 14:58:33 +0100
Subject: [PATCH] redis-trib: new subcommand 'call'. Exec command in all nodes.

Example:

./redis-trib.rb call 192.168.1.11:7000 config get cluster-node-timeout
---
 src/redis-trib.rb | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/redis-trib.rb b/src/redis-trib.rb
index 1fc73917..bff4cab1 100755
--- a/src/redis-trib.rb
+++ b/src/redis-trib.rb
@@ -952,6 +952,23 @@ class RedisTrib
         xputs ">>> New node timeout set. #{ok_count} OK, #{err_count} ERR."
     end
 
+    def call_cluster_cmd(argv,opt)
+        cmd = argv[1..-1]
+        cmd[0] = cmd[0].upcase
+
+        # Load cluster information
+        load_cluster_info_from_node(argv[0])
+        xputs ">>> Calling #{cmd.join(" ")}"
+        @nodes.each{|n|
+            begin
+                res = n.r.send(*cmd)
+                puts "#{n}: #{res}"
+            rescue => e
+                puts "#{n}: #{e}"
+            end
+        }
+    end
+
     def help_cluster_cmd(argv,opt)
         show_help
         exit 0
@@ -995,6 +1012,7 @@ COMMANDS={
     "add-node" => ["addnode_cluster_cmd", 3, "new_host:new_port existing_host:existing_port"],
     "del-node" => ["delnode_cluster_cmd", 3, "host:port node_id"],
     "set-timeout" => ["set_timeout_cluster_cmd", 3, "host:port milliseconds"],
+    "call" =>    ["call_cluster_cmd", -3, "host:port command arg arg .. arg"],
     "help"    => ["help_cluster_cmd", 1, "(show this help)"]
 }