You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2013/12/30 16:55:42 UTC

[1/8] git commit: Allow nodetool to optionally resolve hostnames. Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for CASSANDRA-2238

Updated Branches:
  refs/heads/cassandra-1.2 3eef54097 -> 2f63bbadf
  refs/heads/cassandra-2.0 604e31b60 -> c5ca8de4d
  refs/heads/trunk 23bc52386 -> 76ee9a155


Allow nodetool to optionally resolve hostnames.
Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for
CASSANDRA-2238


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2f63bbad
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2f63bbad
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2f63bbad

Branch: refs/heads/cassandra-1.2
Commit: 2f63bbadfa2fad66e04bc17edc66ce8be7497157
Parents: 3eef540
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 09:51:36 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 09:51:36 2013 -0600

----------------------------------------------------------------------
 .../org/apache/cassandra/tools/NodeCmd.java     | 118 +++++++++++++------
 1 file changed, 79 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/2f63bbad/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index 87b114c..e14ba1a 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -73,6 +73,7 @@ public class NodeCmd
     private static final Pair<String, String> UPGRADE_ALL_SSTABLE_OPT = Pair.create("a", "include-all-sstables");
     private static final Pair<String, String> NO_SNAPSHOT = Pair.create("ns", "no-snapshot");
     private static final Pair<String, String> CFSTATS_IGNORE_OPT = Pair.create("i", "ignore");
+    private static final Pair<String, String> RESOLVE_IP = Pair.create("r", "resolve-ip");
 
     private static final String DEFAULT_HOST = "127.0.0.1";
     private static final int DEFAULT_PORT = 7199;
@@ -98,6 +99,7 @@ public class NodeCmd
         options.addOption(UPGRADE_ALL_SSTABLE_OPT, false, "includes sstables that are already on the most recent version during upgradesstables");
         options.addOption(NO_SNAPSHOT, false, "disables snapshot creation for scrub");
         options.addOption(CFSTATS_IGNORE_OPT, false, "ignore the supplied list of keyspace.columnfamiles in statistics");
+        options.addOption(RESOLVE_IP, false, "show node domain names instead of IPs");
     }
 
     public NodeCmd(NodeProbe probe)
@@ -374,11 +376,13 @@ public class NodeCmd
         Map<String, String> loadMap, hostIDMap, tokensToEndpoints;
         EndpointSnitchInfoMBean epSnitchInfo;
         PrintStream outs;
+        private final boolean resolveIp;
 
-        ClusterStatus(PrintStream outs, String kSpace)
+        ClusterStatus(PrintStream outs, String kSpace, boolean resolveIp)
         {
             this.kSpace = kSpace;
             this.outs = outs;
+            this.resolveIp = resolveIp;
             joiningNodes = probe.getJoiningNodes();
             leavingNodes = probe.getLeavingNodes();
             movingNodes = probe.getMovingNodes();
@@ -396,18 +400,58 @@ public class NodeCmd
             outs.println("|/ State=Normal/Leaving/Joining/Moving");
         }
 
-        private Map<String, Map<InetAddress, Float>> getOwnershipByDc(Map<InetAddress, Float> ownerships)
+        class SetHostStat implements Iterable<HostStat> {
+            final List<HostStat> hostStats = new ArrayList<HostStat>();
+
+            public SetHostStat() {}
+
+            public SetHostStat(Map<InetAddress, Float> ownerships) {
+                for (Map.Entry<InetAddress, Float> entry : ownerships.entrySet()) {
+                    hostStats.add(new HostStat(entry));
+                }
+            }
+
+            @Override
+            public Iterator<HostStat> iterator() {
+                return hostStats.iterator();
+            }
+
+            public void add(HostStat entry) {
+                hostStats.add(entry);
+            }
+        }
+
+        class HostStat {
+            public final String ip;
+            public final String dns;
+            public final Float owns;
+
+            public HostStat(Map.Entry<InetAddress, Float> ownership) {
+                this.ip = ownership.getKey().getHostAddress();
+                this.dns = ownership.getKey().getHostName();
+                this.owns = ownership.getValue();
+            }
+
+            public String ipOrDns() {
+                if (resolveIp) {
+                    return dns;
+                }
+                return ip;
+            }
+        }
+
+        private Map<String, SetHostStat> getOwnershipByDc(SetHostStat ownerships)
         throws UnknownHostException
         {
-            Map<String, Map<InetAddress, Float>> ownershipByDc = Maps.newLinkedHashMap();
+            Map<String, SetHostStat> ownershipByDc = Maps.newLinkedHashMap();
             EndpointSnitchInfoMBean epSnitchInfo = probe.getEndpointSnitchInfoProxy();
 
-            for (Map.Entry<InetAddress, Float> ownership : ownerships.entrySet())
+            for (HostStat ownership : ownerships)
             {
-                String dc = epSnitchInfo.getDatacenter(ownership.getKey().getHostAddress());
+                String dc = epSnitchInfo.getDatacenter(ownership.ip);
                 if (!ownershipByDc.containsKey(dc))
-                    ownershipByDc.put(dc, new LinkedHashMap<InetAddress, Float>());
-                ownershipByDc.get(dc).put(ownership.getKey(), ownership.getValue());
+                    ownershipByDc.put(dc, new SetHostStat());
+                ownershipByDc.get(dc).add(ownership);
             }
 
             return ownershipByDc;
@@ -435,12 +479,12 @@ public class NodeCmd
             return format;
         }
 
-        private void printNode(String endpoint, Float owns, Map<InetAddress, Float> ownerships,
+        private void printNode(HostStat hostStat,
                 boolean hasEffectiveOwns, boolean isTokenPerNode) throws UnknownHostException
         {
             String status, state, load, strOwns, hostID, rack, fmt;
             fmt = getFormat(hasEffectiveOwns, isTokenPerNode);
-
+            String endpoint = hostStat.ip;
             if      (liveNodes.contains(endpoint))        status = "U";
             else if (unreachableNodes.contains(endpoint)) status = "D";
             else                                          status = "?";
@@ -450,18 +494,18 @@ public class NodeCmd
             else                                          state = "N";
 
             load = loadMap.containsKey(endpoint) ? loadMap.get(endpoint) : "?";
-            strOwns = new DecimalFormat("##0.0%").format(ownerships.get(InetAddress.getByName(endpoint)));
+            strOwns = new DecimalFormat("##0.0%").format(hostStat.owns);
             hostID = hostIDMap.get(endpoint);
             rack = epSnitchInfo.getRack(endpoint);
 
             if (isTokenPerNode)
             {
-                outs.printf(fmt, status, state, endpoint, load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
             }
             else
             {
                 int tokens = probe.getTokens(endpoint).size();
-                outs.printf(fmt, status, state, endpoint, load, tokens, strOwns, hostID, rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, tokens, strOwns, hostID, rack);
             }
         }
 
@@ -476,42 +520,41 @@ public class NodeCmd
                 outs.printf(fmt, "-", "-", "Address", "Load", "Tokens", owns, "Host ID", "Rack");
         }
 
+        void findMaxAddressLength(Map<String, SetHostStat> dcs) {
+            maxAddressLength = 0;
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
+            {
+                for (HostStat stat : dc.getValue()) {
+                    maxAddressLength = Math.max(maxAddressLength, stat.ipOrDns().length());
+                }
+            }
+        }
+
         void print() throws UnknownHostException
         {
-            Map<InetAddress, Float> ownerships;
+            SetHostStat ownerships;
             boolean hasEffectiveOwns = false, isTokenPerNode = true;
 
             try
             {
-                ownerships = probe.effectiveOwnership(kSpace);
+                ownerships = new SetHostStat(probe.effectiveOwnership(kSpace));
                 hasEffectiveOwns = true;
             }
             catch (IllegalStateException e)
             {
-                ownerships = probe.getOwnership();
+                ownerships = new SetHostStat(probe.getOwnership());
             }
 
             // More tokens then nodes (aka vnodes)?
             if (new HashSet<String>(tokensToEndpoints.values()).size() < tokensToEndpoints.keySet().size())
                 isTokenPerNode = false;
 
-            maxAddressLength = 0;
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
-            {
-                int dcMaxAddressLength = Collections.max(dc.getValue().keySet(), new Comparator<InetAddress>() {
-                    @Override
-                    public int compare(InetAddress first, InetAddress second)
-                    {
-                        return ((Integer)first.getHostAddress().length()).compareTo((Integer)second.getHostAddress().length());
-                    }
-                }).getHostAddress().length();
+            Map<String, SetHostStat> dcs = getOwnershipByDc(ownerships);
 
-                if(dcMaxAddressLength > maxAddressLength)
-                    maxAddressLength = dcMaxAddressLength;
-            }
+            findMaxAddressLength(dcs);
 
             // Datacenters
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
             {
                 String dcHeader = String.format("Datacenter: %s%n", dc.getKey());
                 outs.printf(dcHeader);
@@ -522,21 +565,17 @@ public class NodeCmd
                 printNodesHeader(hasEffectiveOwns, isTokenPerNode);
 
                 // Nodes
-                for (Map.Entry<InetAddress, Float> entry : dc.getValue().entrySet())
-                    printNode(entry.getKey().getHostAddress(),
-                              entry.getValue(),
-                              ownerships,
-                              hasEffectiveOwns,
-                              isTokenPerNode);
+                for (HostStat entry : dc.getValue())
+                    printNode(entry, hasEffectiveOwns, isTokenPerNode);
             }
         }
     }
 
     /** Writes a table of cluster-wide node information to a PrintStream
      * @throws UnknownHostException */
-    public void printClusterStatus(PrintStream outs, String keyspace) throws UnknownHostException
+    public void printClusterStatus(PrintStream outs, String keyspace, boolean resolveIp) throws UnknownHostException
     {
-        new ClusterStatus(outs, keyspace).print();
+        new ClusterStatus(outs, keyspace, resolveIp).print();
     }
 
     public void printThreadPoolStats(PrintStream outs)
@@ -1174,8 +1213,9 @@ public class NodeCmd
                     
 
                 case STATUS :
-                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0]);
-                    else                      nodeCmd.printClusterStatus(System.out, null);
+                    boolean resolveIp = cmd.hasOption(RESOLVE_IP.left);
+                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0], resolveIp);
+                    else                      nodeCmd.printClusterStatus(System.out, null, resolveIp);
                     break;
 
                 case DECOMMISSION :


[3/8] git commit: Allow nodetool to optionally resolve hostnames. Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for CASSANDRA-2238

Posted by br...@apache.org.
Allow nodetool to optionally resolve hostnames.
Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for
CASSANDRA-2238


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2f63bbad
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2f63bbad
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2f63bbad

Branch: refs/heads/trunk
Commit: 2f63bbadfa2fad66e04bc17edc66ce8be7497157
Parents: 3eef540
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 09:51:36 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 09:51:36 2013 -0600

----------------------------------------------------------------------
 .../org/apache/cassandra/tools/NodeCmd.java     | 118 +++++++++++++------
 1 file changed, 79 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/2f63bbad/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index 87b114c..e14ba1a 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -73,6 +73,7 @@ public class NodeCmd
     private static final Pair<String, String> UPGRADE_ALL_SSTABLE_OPT = Pair.create("a", "include-all-sstables");
     private static final Pair<String, String> NO_SNAPSHOT = Pair.create("ns", "no-snapshot");
     private static final Pair<String, String> CFSTATS_IGNORE_OPT = Pair.create("i", "ignore");
+    private static final Pair<String, String> RESOLVE_IP = Pair.create("r", "resolve-ip");
 
     private static final String DEFAULT_HOST = "127.0.0.1";
     private static final int DEFAULT_PORT = 7199;
@@ -98,6 +99,7 @@ public class NodeCmd
         options.addOption(UPGRADE_ALL_SSTABLE_OPT, false, "includes sstables that are already on the most recent version during upgradesstables");
         options.addOption(NO_SNAPSHOT, false, "disables snapshot creation for scrub");
         options.addOption(CFSTATS_IGNORE_OPT, false, "ignore the supplied list of keyspace.columnfamiles in statistics");
+        options.addOption(RESOLVE_IP, false, "show node domain names instead of IPs");
     }
 
     public NodeCmd(NodeProbe probe)
@@ -374,11 +376,13 @@ public class NodeCmd
         Map<String, String> loadMap, hostIDMap, tokensToEndpoints;
         EndpointSnitchInfoMBean epSnitchInfo;
         PrintStream outs;
+        private final boolean resolveIp;
 
-        ClusterStatus(PrintStream outs, String kSpace)
+        ClusterStatus(PrintStream outs, String kSpace, boolean resolveIp)
         {
             this.kSpace = kSpace;
             this.outs = outs;
+            this.resolveIp = resolveIp;
             joiningNodes = probe.getJoiningNodes();
             leavingNodes = probe.getLeavingNodes();
             movingNodes = probe.getMovingNodes();
@@ -396,18 +400,58 @@ public class NodeCmd
             outs.println("|/ State=Normal/Leaving/Joining/Moving");
         }
 
-        private Map<String, Map<InetAddress, Float>> getOwnershipByDc(Map<InetAddress, Float> ownerships)
+        class SetHostStat implements Iterable<HostStat> {
+            final List<HostStat> hostStats = new ArrayList<HostStat>();
+
+            public SetHostStat() {}
+
+            public SetHostStat(Map<InetAddress, Float> ownerships) {
+                for (Map.Entry<InetAddress, Float> entry : ownerships.entrySet()) {
+                    hostStats.add(new HostStat(entry));
+                }
+            }
+
+            @Override
+            public Iterator<HostStat> iterator() {
+                return hostStats.iterator();
+            }
+
+            public void add(HostStat entry) {
+                hostStats.add(entry);
+            }
+        }
+
+        class HostStat {
+            public final String ip;
+            public final String dns;
+            public final Float owns;
+
+            public HostStat(Map.Entry<InetAddress, Float> ownership) {
+                this.ip = ownership.getKey().getHostAddress();
+                this.dns = ownership.getKey().getHostName();
+                this.owns = ownership.getValue();
+            }
+
+            public String ipOrDns() {
+                if (resolveIp) {
+                    return dns;
+                }
+                return ip;
+            }
+        }
+
+        private Map<String, SetHostStat> getOwnershipByDc(SetHostStat ownerships)
         throws UnknownHostException
         {
-            Map<String, Map<InetAddress, Float>> ownershipByDc = Maps.newLinkedHashMap();
+            Map<String, SetHostStat> ownershipByDc = Maps.newLinkedHashMap();
             EndpointSnitchInfoMBean epSnitchInfo = probe.getEndpointSnitchInfoProxy();
 
-            for (Map.Entry<InetAddress, Float> ownership : ownerships.entrySet())
+            for (HostStat ownership : ownerships)
             {
-                String dc = epSnitchInfo.getDatacenter(ownership.getKey().getHostAddress());
+                String dc = epSnitchInfo.getDatacenter(ownership.ip);
                 if (!ownershipByDc.containsKey(dc))
-                    ownershipByDc.put(dc, new LinkedHashMap<InetAddress, Float>());
-                ownershipByDc.get(dc).put(ownership.getKey(), ownership.getValue());
+                    ownershipByDc.put(dc, new SetHostStat());
+                ownershipByDc.get(dc).add(ownership);
             }
 
             return ownershipByDc;
@@ -435,12 +479,12 @@ public class NodeCmd
             return format;
         }
 
-        private void printNode(String endpoint, Float owns, Map<InetAddress, Float> ownerships,
+        private void printNode(HostStat hostStat,
                 boolean hasEffectiveOwns, boolean isTokenPerNode) throws UnknownHostException
         {
             String status, state, load, strOwns, hostID, rack, fmt;
             fmt = getFormat(hasEffectiveOwns, isTokenPerNode);
-
+            String endpoint = hostStat.ip;
             if      (liveNodes.contains(endpoint))        status = "U";
             else if (unreachableNodes.contains(endpoint)) status = "D";
             else                                          status = "?";
@@ -450,18 +494,18 @@ public class NodeCmd
             else                                          state = "N";
 
             load = loadMap.containsKey(endpoint) ? loadMap.get(endpoint) : "?";
-            strOwns = new DecimalFormat("##0.0%").format(ownerships.get(InetAddress.getByName(endpoint)));
+            strOwns = new DecimalFormat("##0.0%").format(hostStat.owns);
             hostID = hostIDMap.get(endpoint);
             rack = epSnitchInfo.getRack(endpoint);
 
             if (isTokenPerNode)
             {
-                outs.printf(fmt, status, state, endpoint, load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
             }
             else
             {
                 int tokens = probe.getTokens(endpoint).size();
-                outs.printf(fmt, status, state, endpoint, load, tokens, strOwns, hostID, rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, tokens, strOwns, hostID, rack);
             }
         }
 
@@ -476,42 +520,41 @@ public class NodeCmd
                 outs.printf(fmt, "-", "-", "Address", "Load", "Tokens", owns, "Host ID", "Rack");
         }
 
+        void findMaxAddressLength(Map<String, SetHostStat> dcs) {
+            maxAddressLength = 0;
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
+            {
+                for (HostStat stat : dc.getValue()) {
+                    maxAddressLength = Math.max(maxAddressLength, stat.ipOrDns().length());
+                }
+            }
+        }
+
         void print() throws UnknownHostException
         {
-            Map<InetAddress, Float> ownerships;
+            SetHostStat ownerships;
             boolean hasEffectiveOwns = false, isTokenPerNode = true;
 
             try
             {
-                ownerships = probe.effectiveOwnership(kSpace);
+                ownerships = new SetHostStat(probe.effectiveOwnership(kSpace));
                 hasEffectiveOwns = true;
             }
             catch (IllegalStateException e)
             {
-                ownerships = probe.getOwnership();
+                ownerships = new SetHostStat(probe.getOwnership());
             }
 
             // More tokens then nodes (aka vnodes)?
             if (new HashSet<String>(tokensToEndpoints.values()).size() < tokensToEndpoints.keySet().size())
                 isTokenPerNode = false;
 
-            maxAddressLength = 0;
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
-            {
-                int dcMaxAddressLength = Collections.max(dc.getValue().keySet(), new Comparator<InetAddress>() {
-                    @Override
-                    public int compare(InetAddress first, InetAddress second)
-                    {
-                        return ((Integer)first.getHostAddress().length()).compareTo((Integer)second.getHostAddress().length());
-                    }
-                }).getHostAddress().length();
+            Map<String, SetHostStat> dcs = getOwnershipByDc(ownerships);
 
-                if(dcMaxAddressLength > maxAddressLength)
-                    maxAddressLength = dcMaxAddressLength;
-            }
+            findMaxAddressLength(dcs);
 
             // Datacenters
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
             {
                 String dcHeader = String.format("Datacenter: %s%n", dc.getKey());
                 outs.printf(dcHeader);
@@ -522,21 +565,17 @@ public class NodeCmd
                 printNodesHeader(hasEffectiveOwns, isTokenPerNode);
 
                 // Nodes
-                for (Map.Entry<InetAddress, Float> entry : dc.getValue().entrySet())
-                    printNode(entry.getKey().getHostAddress(),
-                              entry.getValue(),
-                              ownerships,
-                              hasEffectiveOwns,
-                              isTokenPerNode);
+                for (HostStat entry : dc.getValue())
+                    printNode(entry, hasEffectiveOwns, isTokenPerNode);
             }
         }
     }
 
     /** Writes a table of cluster-wide node information to a PrintStream
      * @throws UnknownHostException */
-    public void printClusterStatus(PrintStream outs, String keyspace) throws UnknownHostException
+    public void printClusterStatus(PrintStream outs, String keyspace, boolean resolveIp) throws UnknownHostException
     {
-        new ClusterStatus(outs, keyspace).print();
+        new ClusterStatus(outs, keyspace, resolveIp).print();
     }
 
     public void printThreadPoolStats(PrintStream outs)
@@ -1174,8 +1213,9 @@ public class NodeCmd
                     
 
                 case STATUS :
-                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0]);
-                    else                      nodeCmd.printClusterStatus(System.out, null);
+                    boolean resolveIp = cmd.hasOption(RESOLVE_IP.left);
+                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0], resolveIp);
+                    else                      nodeCmd.printClusterStatus(System.out, null, resolveIp);
                     break;
 
                 case DECOMMISSION :


[4/8] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0

Posted by br...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/fc9709cd
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fc9709cd
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fc9709cd

Branch: refs/heads/cassandra-2.0
Commit: fc9709cdfe6076bf7b6653a1797299c197be8619
Parents: 604e31b 2f63bba
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 09:52:31 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 09:52:31 2013 -0600

----------------------------------------------------------------------

----------------------------------------------------------------------



[8/8] git commit: Merge branch 'cassandra-2.0' into trunk

Posted by br...@apache.org.
Merge branch 'cassandra-2.0' into trunk


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/76ee9a15
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/76ee9a15
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/76ee9a15

Branch: refs/heads/trunk
Commit: 76ee9a155ea14304595bc2e9755accbfded04e62
Parents: 23bc523 c5ca8de
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 09:53:51 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 09:53:51 2013 -0600

----------------------------------------------------------------------
 .../org/apache/cassandra/tools/NodeCmd.java     | 118 +++++++++++++------
 1 file changed, 79 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/76ee9a15/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------


[7/8] git commit: Allow nodetool to optionally resolve hostnames. Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for CASSANDRA-2238

Posted by br...@apache.org.
Allow nodetool to optionally resolve hostnames.
Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for
CASSANDRA-2238


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c5ca8de4
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c5ca8de4
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c5ca8de4

Branch: refs/heads/cassandra-2.0
Commit: c5ca8de4dfd512e971f9bba100dfcc3709f70786
Parents: fc9709c
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 09:53:13 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 09:53:13 2013 -0600

----------------------------------------------------------------------
 .../org/apache/cassandra/tools/NodeCmd.java     | 118 +++++++++++++------
 1 file changed, 79 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5ca8de4/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index f1e7c73..0cc7320 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -73,6 +73,7 @@ public class NodeCmd
     private static final Pair<String, String> UPGRADE_ALL_SSTABLE_OPT = Pair.create("a", "include-all-sstables");
     private static final Pair<String, String> NO_SNAPSHOT = Pair.create("ns", "no-snapshot");
     private static final Pair<String, String> CFSTATS_IGNORE_OPT = Pair.create("i", "ignore");
+    private static final Pair<String, String> RESOLVE_IP = Pair.create("r", "resolve-ip");
 
     private static final String DEFAULT_HOST = "127.0.0.1";
     private static final int DEFAULT_PORT = 7199;
@@ -99,6 +100,7 @@ public class NodeCmd
         options.addOption(UPGRADE_ALL_SSTABLE_OPT, false, "includes sstables that are already on the most recent version during upgradesstables");
         options.addOption(NO_SNAPSHOT, false, "disables snapshot creation for scrub");
         options.addOption(CFSTATS_IGNORE_OPT, false, "ignore the supplied list of keyspace.columnfamiles in statistics");
+        options.addOption(RESOLVE_IP, false, "show node domain names instead of IPs");
     }
 
     public NodeCmd(NodeProbe probe)
@@ -373,11 +375,13 @@ public class NodeCmd
         Map<String, String> loadMap, hostIDMap, tokensToEndpoints;
         EndpointSnitchInfoMBean epSnitchInfo;
         PrintStream outs;
+        private final boolean resolveIp;
 
-        ClusterStatus(PrintStream outs, String kSpace)
+        ClusterStatus(PrintStream outs, String kSpace, boolean resolveIp)
         {
             this.kSpace = kSpace;
             this.outs = outs;
+            this.resolveIp = resolveIp;
             joiningNodes = probe.getJoiningNodes();
             leavingNodes = probe.getLeavingNodes();
             movingNodes = probe.getMovingNodes();
@@ -395,18 +399,58 @@ public class NodeCmd
             outs.println("|/ State=Normal/Leaving/Joining/Moving");
         }
 
-        private Map<String, Map<InetAddress, Float>> getOwnershipByDc(Map<InetAddress, Float> ownerships)
+        class SetHostStat implements Iterable<HostStat> {
+            final List<HostStat> hostStats = new ArrayList<HostStat>();
+
+            public SetHostStat() {}
+
+            public SetHostStat(Map<InetAddress, Float> ownerships) {
+                for (Map.Entry<InetAddress, Float> entry : ownerships.entrySet()) {
+                    hostStats.add(new HostStat(entry));
+                }
+            }
+
+            @Override
+            public Iterator<HostStat> iterator() {
+                return hostStats.iterator();
+            }
+
+            public void add(HostStat entry) {
+                hostStats.add(entry);
+            }
+        }
+
+        class HostStat {
+            public final String ip;
+            public final String dns;
+            public final Float owns;
+
+            public HostStat(Map.Entry<InetAddress, Float> ownership) {
+                this.ip = ownership.getKey().getHostAddress();
+                this.dns = ownership.getKey().getHostName();
+                this.owns = ownership.getValue();
+            }
+
+            public String ipOrDns() {
+                if (resolveIp) {
+                    return dns;
+                }
+                return ip;
+            }
+        }
+
+        private Map<String, SetHostStat> getOwnershipByDc(SetHostStat ownerships)
         throws UnknownHostException
         {
-            Map<String, Map<InetAddress, Float>> ownershipByDc = Maps.newLinkedHashMap();
+            Map<String, SetHostStat> ownershipByDc = Maps.newLinkedHashMap();
             EndpointSnitchInfoMBean epSnitchInfo = probe.getEndpointSnitchInfoProxy();
 
-            for (Map.Entry<InetAddress, Float> ownership : ownerships.entrySet())
+            for (HostStat ownership : ownerships)
             {
-                String dc = epSnitchInfo.getDatacenter(ownership.getKey().getHostAddress());
+                String dc = epSnitchInfo.getDatacenter(ownership.ip);
                 if (!ownershipByDc.containsKey(dc))
-                    ownershipByDc.put(dc, new LinkedHashMap<InetAddress, Float>());
-                ownershipByDc.get(dc).put(ownership.getKey(), ownership.getValue());
+                    ownershipByDc.put(dc, new SetHostStat());
+                ownershipByDc.get(dc).add(ownership);
             }
 
             return ownershipByDc;
@@ -434,12 +478,12 @@ public class NodeCmd
             return format;
         }
 
-        private void printNode(String endpoint, Float owns, Map<InetAddress, Float> ownerships,
+        private void printNode(HostStat hostStat,
                 boolean hasEffectiveOwns, boolean isTokenPerNode) throws UnknownHostException
         {
             String status, state, load, strOwns, hostID, rack, fmt;
             fmt = getFormat(hasEffectiveOwns, isTokenPerNode);
-
+            String endpoint = hostStat.ip;
             if      (liveNodes.contains(endpoint))        status = "U";
             else if (unreachableNodes.contains(endpoint)) status = "D";
             else                                          status = "?";
@@ -449,18 +493,18 @@ public class NodeCmd
             else                                          state = "N";
 
             load = loadMap.containsKey(endpoint) ? loadMap.get(endpoint) : "?";
-            strOwns = new DecimalFormat("##0.0%").format(ownerships.get(InetAddress.getByName(endpoint)));
+            strOwns = new DecimalFormat("##0.0%").format(hostStat.owns);
             hostID = hostIDMap.get(endpoint);
             rack = epSnitchInfo.getRack(endpoint);
 
             if (isTokenPerNode)
             {
-                outs.printf(fmt, status, state, endpoint, load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
             }
             else
             {
                 int tokens = probe.getTokens(endpoint).size();
-                outs.printf(fmt, status, state, endpoint, load, tokens, strOwns, hostID, rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, tokens, strOwns, hostID, rack);
             }
         }
 
@@ -475,42 +519,41 @@ public class NodeCmd
                 outs.printf(fmt, "-", "-", "Address", "Load", "Tokens", owns, "Host ID", "Rack");
         }
 
+        void findMaxAddressLength(Map<String, SetHostStat> dcs) {
+            maxAddressLength = 0;
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
+            {
+                for (HostStat stat : dc.getValue()) {
+                    maxAddressLength = Math.max(maxAddressLength, stat.ipOrDns().length());
+                }
+            }
+        }
+
         void print() throws UnknownHostException
         {
-            Map<InetAddress, Float> ownerships;
+            SetHostStat ownerships;
             boolean hasEffectiveOwns = false, isTokenPerNode = true;
 
             try
             {
-                ownerships = probe.effectiveOwnership(kSpace);
+                ownerships = new SetHostStat(probe.effectiveOwnership(kSpace));
                 hasEffectiveOwns = true;
             }
             catch (IllegalStateException e)
             {
-                ownerships = probe.getOwnership();
+                ownerships = new SetHostStat(probe.getOwnership());
             }
 
             // More tokens then nodes (aka vnodes)?
             if (new HashSet<String>(tokensToEndpoints.values()).size() < tokensToEndpoints.keySet().size())
                 isTokenPerNode = false;
 
-            maxAddressLength = 0;
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
-            {
-                int dcMaxAddressLength = Collections.max(dc.getValue().keySet(), new Comparator<InetAddress>() {
-                    @Override
-                    public int compare(InetAddress first, InetAddress second)
-                    {
-                        return ((Integer)first.getHostAddress().length()).compareTo((Integer)second.getHostAddress().length());
-                    }
-                }).getHostAddress().length();
+            Map<String, SetHostStat> dcs = getOwnershipByDc(ownerships);
 
-                if(dcMaxAddressLength > maxAddressLength)
-                    maxAddressLength = dcMaxAddressLength;
-            }
+            findMaxAddressLength(dcs);
 
             // Datacenters
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
             {
                 String dcHeader = String.format("Datacenter: %s%n", dc.getKey());
                 outs.printf(dcHeader);
@@ -521,21 +564,17 @@ public class NodeCmd
                 printNodesHeader(hasEffectiveOwns, isTokenPerNode);
 
                 // Nodes
-                for (Map.Entry<InetAddress, Float> entry : dc.getValue().entrySet())
-                    printNode(entry.getKey().getHostAddress(),
-                              entry.getValue(),
-                              ownerships,
-                              hasEffectiveOwns,
-                              isTokenPerNode);
+                for (HostStat entry : dc.getValue())
+                    printNode(entry, hasEffectiveOwns, isTokenPerNode);
             }
         }
     }
 
     /** Writes a keyspaceName of cluster-wide node information to a PrintStream
      * @throws UnknownHostException */
-    public void printClusterStatus(PrintStream outs, String keyspace) throws UnknownHostException
+    public void printClusterStatus(PrintStream outs, String keyspace, boolean resolveIp) throws UnknownHostException
     {
-        new ClusterStatus(outs, keyspace).print();
+        new ClusterStatus(outs, keyspace, resolveIp).print();
     }
 
     public void printThreadPoolStats(PrintStream outs)
@@ -1125,8 +1164,9 @@ public class NodeCmd
                     break;
 
                 case STATUS :
-                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0]);
-                    else                      nodeCmd.printClusterStatus(System.out, null);
+                    boolean resolveIp = cmd.hasOption(RESOLVE_IP.left);
+                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0], resolveIp);
+                    else                      nodeCmd.printClusterStatus(System.out, null, resolveIp);
                     break;
 
                 case DECOMMISSION :


[2/8] git commit: Allow nodetool to optionally resolve hostnames. Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for CASSANDRA-2238

Posted by br...@apache.org.
Allow nodetool to optionally resolve hostnames.
Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for
CASSANDRA-2238


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2f63bbad
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2f63bbad
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2f63bbad

Branch: refs/heads/cassandra-2.0
Commit: 2f63bbadfa2fad66e04bc17edc66ce8be7497157
Parents: 3eef540
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 09:51:36 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 09:51:36 2013 -0600

----------------------------------------------------------------------
 .../org/apache/cassandra/tools/NodeCmd.java     | 118 +++++++++++++------
 1 file changed, 79 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/2f63bbad/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index 87b114c..e14ba1a 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -73,6 +73,7 @@ public class NodeCmd
     private static final Pair<String, String> UPGRADE_ALL_SSTABLE_OPT = Pair.create("a", "include-all-sstables");
     private static final Pair<String, String> NO_SNAPSHOT = Pair.create("ns", "no-snapshot");
     private static final Pair<String, String> CFSTATS_IGNORE_OPT = Pair.create("i", "ignore");
+    private static final Pair<String, String> RESOLVE_IP = Pair.create("r", "resolve-ip");
 
     private static final String DEFAULT_HOST = "127.0.0.1";
     private static final int DEFAULT_PORT = 7199;
@@ -98,6 +99,7 @@ public class NodeCmd
         options.addOption(UPGRADE_ALL_SSTABLE_OPT, false, "includes sstables that are already on the most recent version during upgradesstables");
         options.addOption(NO_SNAPSHOT, false, "disables snapshot creation for scrub");
         options.addOption(CFSTATS_IGNORE_OPT, false, "ignore the supplied list of keyspace.columnfamiles in statistics");
+        options.addOption(RESOLVE_IP, false, "show node domain names instead of IPs");
     }
 
     public NodeCmd(NodeProbe probe)
@@ -374,11 +376,13 @@ public class NodeCmd
         Map<String, String> loadMap, hostIDMap, tokensToEndpoints;
         EndpointSnitchInfoMBean epSnitchInfo;
         PrintStream outs;
+        private final boolean resolveIp;
 
-        ClusterStatus(PrintStream outs, String kSpace)
+        ClusterStatus(PrintStream outs, String kSpace, boolean resolveIp)
         {
             this.kSpace = kSpace;
             this.outs = outs;
+            this.resolveIp = resolveIp;
             joiningNodes = probe.getJoiningNodes();
             leavingNodes = probe.getLeavingNodes();
             movingNodes = probe.getMovingNodes();
@@ -396,18 +400,58 @@ public class NodeCmd
             outs.println("|/ State=Normal/Leaving/Joining/Moving");
         }
 
-        private Map<String, Map<InetAddress, Float>> getOwnershipByDc(Map<InetAddress, Float> ownerships)
+        class SetHostStat implements Iterable<HostStat> {
+            final List<HostStat> hostStats = new ArrayList<HostStat>();
+
+            public SetHostStat() {}
+
+            public SetHostStat(Map<InetAddress, Float> ownerships) {
+                for (Map.Entry<InetAddress, Float> entry : ownerships.entrySet()) {
+                    hostStats.add(new HostStat(entry));
+                }
+            }
+
+            @Override
+            public Iterator<HostStat> iterator() {
+                return hostStats.iterator();
+            }
+
+            public void add(HostStat entry) {
+                hostStats.add(entry);
+            }
+        }
+
+        class HostStat {
+            public final String ip;
+            public final String dns;
+            public final Float owns;
+
+            public HostStat(Map.Entry<InetAddress, Float> ownership) {
+                this.ip = ownership.getKey().getHostAddress();
+                this.dns = ownership.getKey().getHostName();
+                this.owns = ownership.getValue();
+            }
+
+            public String ipOrDns() {
+                if (resolveIp) {
+                    return dns;
+                }
+                return ip;
+            }
+        }
+
+        private Map<String, SetHostStat> getOwnershipByDc(SetHostStat ownerships)
         throws UnknownHostException
         {
-            Map<String, Map<InetAddress, Float>> ownershipByDc = Maps.newLinkedHashMap();
+            Map<String, SetHostStat> ownershipByDc = Maps.newLinkedHashMap();
             EndpointSnitchInfoMBean epSnitchInfo = probe.getEndpointSnitchInfoProxy();
 
-            for (Map.Entry<InetAddress, Float> ownership : ownerships.entrySet())
+            for (HostStat ownership : ownerships)
             {
-                String dc = epSnitchInfo.getDatacenter(ownership.getKey().getHostAddress());
+                String dc = epSnitchInfo.getDatacenter(ownership.ip);
                 if (!ownershipByDc.containsKey(dc))
-                    ownershipByDc.put(dc, new LinkedHashMap<InetAddress, Float>());
-                ownershipByDc.get(dc).put(ownership.getKey(), ownership.getValue());
+                    ownershipByDc.put(dc, new SetHostStat());
+                ownershipByDc.get(dc).add(ownership);
             }
 
             return ownershipByDc;
@@ -435,12 +479,12 @@ public class NodeCmd
             return format;
         }
 
-        private void printNode(String endpoint, Float owns, Map<InetAddress, Float> ownerships,
+        private void printNode(HostStat hostStat,
                 boolean hasEffectiveOwns, boolean isTokenPerNode) throws UnknownHostException
         {
             String status, state, load, strOwns, hostID, rack, fmt;
             fmt = getFormat(hasEffectiveOwns, isTokenPerNode);
-
+            String endpoint = hostStat.ip;
             if      (liveNodes.contains(endpoint))        status = "U";
             else if (unreachableNodes.contains(endpoint)) status = "D";
             else                                          status = "?";
@@ -450,18 +494,18 @@ public class NodeCmd
             else                                          state = "N";
 
             load = loadMap.containsKey(endpoint) ? loadMap.get(endpoint) : "?";
-            strOwns = new DecimalFormat("##0.0%").format(ownerships.get(InetAddress.getByName(endpoint)));
+            strOwns = new DecimalFormat("##0.0%").format(hostStat.owns);
             hostID = hostIDMap.get(endpoint);
             rack = epSnitchInfo.getRack(endpoint);
 
             if (isTokenPerNode)
             {
-                outs.printf(fmt, status, state, endpoint, load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
             }
             else
             {
                 int tokens = probe.getTokens(endpoint).size();
-                outs.printf(fmt, status, state, endpoint, load, tokens, strOwns, hostID, rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, tokens, strOwns, hostID, rack);
             }
         }
 
@@ -476,42 +520,41 @@ public class NodeCmd
                 outs.printf(fmt, "-", "-", "Address", "Load", "Tokens", owns, "Host ID", "Rack");
         }
 
+        void findMaxAddressLength(Map<String, SetHostStat> dcs) {
+            maxAddressLength = 0;
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
+            {
+                for (HostStat stat : dc.getValue()) {
+                    maxAddressLength = Math.max(maxAddressLength, stat.ipOrDns().length());
+                }
+            }
+        }
+
         void print() throws UnknownHostException
         {
-            Map<InetAddress, Float> ownerships;
+            SetHostStat ownerships;
             boolean hasEffectiveOwns = false, isTokenPerNode = true;
 
             try
             {
-                ownerships = probe.effectiveOwnership(kSpace);
+                ownerships = new SetHostStat(probe.effectiveOwnership(kSpace));
                 hasEffectiveOwns = true;
             }
             catch (IllegalStateException e)
             {
-                ownerships = probe.getOwnership();
+                ownerships = new SetHostStat(probe.getOwnership());
             }
 
             // More tokens then nodes (aka vnodes)?
             if (new HashSet<String>(tokensToEndpoints.values()).size() < tokensToEndpoints.keySet().size())
                 isTokenPerNode = false;
 
-            maxAddressLength = 0;
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
-            {
-                int dcMaxAddressLength = Collections.max(dc.getValue().keySet(), new Comparator<InetAddress>() {
-                    @Override
-                    public int compare(InetAddress first, InetAddress second)
-                    {
-                        return ((Integer)first.getHostAddress().length()).compareTo((Integer)second.getHostAddress().length());
-                    }
-                }).getHostAddress().length();
+            Map<String, SetHostStat> dcs = getOwnershipByDc(ownerships);
 
-                if(dcMaxAddressLength > maxAddressLength)
-                    maxAddressLength = dcMaxAddressLength;
-            }
+            findMaxAddressLength(dcs);
 
             // Datacenters
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
             {
                 String dcHeader = String.format("Datacenter: %s%n", dc.getKey());
                 outs.printf(dcHeader);
@@ -522,21 +565,17 @@ public class NodeCmd
                 printNodesHeader(hasEffectiveOwns, isTokenPerNode);
 
                 // Nodes
-                for (Map.Entry<InetAddress, Float> entry : dc.getValue().entrySet())
-                    printNode(entry.getKey().getHostAddress(),
-                              entry.getValue(),
-                              ownerships,
-                              hasEffectiveOwns,
-                              isTokenPerNode);
+                for (HostStat entry : dc.getValue())
+                    printNode(entry, hasEffectiveOwns, isTokenPerNode);
             }
         }
     }
 
     /** Writes a table of cluster-wide node information to a PrintStream
      * @throws UnknownHostException */
-    public void printClusterStatus(PrintStream outs, String keyspace) throws UnknownHostException
+    public void printClusterStatus(PrintStream outs, String keyspace, boolean resolveIp) throws UnknownHostException
     {
-        new ClusterStatus(outs, keyspace).print();
+        new ClusterStatus(outs, keyspace, resolveIp).print();
     }
 
     public void printThreadPoolStats(PrintStream outs)
@@ -1174,8 +1213,9 @@ public class NodeCmd
                     
 
                 case STATUS :
-                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0]);
-                    else                      nodeCmd.printClusterStatus(System.out, null);
+                    boolean resolveIp = cmd.hasOption(RESOLVE_IP.left);
+                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0], resolveIp);
+                    else                      nodeCmd.printClusterStatus(System.out, null, resolveIp);
                     break;
 
                 case DECOMMISSION :


[5/8] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0

Posted by br...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/fc9709cd
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fc9709cd
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fc9709cd

Branch: refs/heads/trunk
Commit: fc9709cdfe6076bf7b6653a1797299c197be8619
Parents: 604e31b 2f63bba
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 09:52:31 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 09:52:31 2013 -0600

----------------------------------------------------------------------

----------------------------------------------------------------------



[6/8] git commit: Allow nodetool to optionally resolve hostnames. Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for CASSANDRA-2238

Posted by br...@apache.org.
Allow nodetool to optionally resolve hostnames.
Patch by Daneel S. Yaitskov, reviewed by brandonwilliams for
CASSANDRA-2238


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c5ca8de4
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c5ca8de4
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c5ca8de4

Branch: refs/heads/trunk
Commit: c5ca8de4dfd512e971f9bba100dfcc3709f70786
Parents: fc9709c
Author: Brandon Williams <br...@apache.org>
Authored: Mon Dec 30 09:53:13 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Mon Dec 30 09:53:13 2013 -0600

----------------------------------------------------------------------
 .../org/apache/cassandra/tools/NodeCmd.java     | 118 +++++++++++++------
 1 file changed, 79 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5ca8de4/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index f1e7c73..0cc7320 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -73,6 +73,7 @@ public class NodeCmd
     private static final Pair<String, String> UPGRADE_ALL_SSTABLE_OPT = Pair.create("a", "include-all-sstables");
     private static final Pair<String, String> NO_SNAPSHOT = Pair.create("ns", "no-snapshot");
     private static final Pair<String, String> CFSTATS_IGNORE_OPT = Pair.create("i", "ignore");
+    private static final Pair<String, String> RESOLVE_IP = Pair.create("r", "resolve-ip");
 
     private static final String DEFAULT_HOST = "127.0.0.1";
     private static final int DEFAULT_PORT = 7199;
@@ -99,6 +100,7 @@ public class NodeCmd
         options.addOption(UPGRADE_ALL_SSTABLE_OPT, false, "includes sstables that are already on the most recent version during upgradesstables");
         options.addOption(NO_SNAPSHOT, false, "disables snapshot creation for scrub");
         options.addOption(CFSTATS_IGNORE_OPT, false, "ignore the supplied list of keyspace.columnfamiles in statistics");
+        options.addOption(RESOLVE_IP, false, "show node domain names instead of IPs");
     }
 
     public NodeCmd(NodeProbe probe)
@@ -373,11 +375,13 @@ public class NodeCmd
         Map<String, String> loadMap, hostIDMap, tokensToEndpoints;
         EndpointSnitchInfoMBean epSnitchInfo;
         PrintStream outs;
+        private final boolean resolveIp;
 
-        ClusterStatus(PrintStream outs, String kSpace)
+        ClusterStatus(PrintStream outs, String kSpace, boolean resolveIp)
         {
             this.kSpace = kSpace;
             this.outs = outs;
+            this.resolveIp = resolveIp;
             joiningNodes = probe.getJoiningNodes();
             leavingNodes = probe.getLeavingNodes();
             movingNodes = probe.getMovingNodes();
@@ -395,18 +399,58 @@ public class NodeCmd
             outs.println("|/ State=Normal/Leaving/Joining/Moving");
         }
 
-        private Map<String, Map<InetAddress, Float>> getOwnershipByDc(Map<InetAddress, Float> ownerships)
+        class SetHostStat implements Iterable<HostStat> {
+            final List<HostStat> hostStats = new ArrayList<HostStat>();
+
+            public SetHostStat() {}
+
+            public SetHostStat(Map<InetAddress, Float> ownerships) {
+                for (Map.Entry<InetAddress, Float> entry : ownerships.entrySet()) {
+                    hostStats.add(new HostStat(entry));
+                }
+            }
+
+            @Override
+            public Iterator<HostStat> iterator() {
+                return hostStats.iterator();
+            }
+
+            public void add(HostStat entry) {
+                hostStats.add(entry);
+            }
+        }
+
+        class HostStat {
+            public final String ip;
+            public final String dns;
+            public final Float owns;
+
+            public HostStat(Map.Entry<InetAddress, Float> ownership) {
+                this.ip = ownership.getKey().getHostAddress();
+                this.dns = ownership.getKey().getHostName();
+                this.owns = ownership.getValue();
+            }
+
+            public String ipOrDns() {
+                if (resolveIp) {
+                    return dns;
+                }
+                return ip;
+            }
+        }
+
+        private Map<String, SetHostStat> getOwnershipByDc(SetHostStat ownerships)
         throws UnknownHostException
         {
-            Map<String, Map<InetAddress, Float>> ownershipByDc = Maps.newLinkedHashMap();
+            Map<String, SetHostStat> ownershipByDc = Maps.newLinkedHashMap();
             EndpointSnitchInfoMBean epSnitchInfo = probe.getEndpointSnitchInfoProxy();
 
-            for (Map.Entry<InetAddress, Float> ownership : ownerships.entrySet())
+            for (HostStat ownership : ownerships)
             {
-                String dc = epSnitchInfo.getDatacenter(ownership.getKey().getHostAddress());
+                String dc = epSnitchInfo.getDatacenter(ownership.ip);
                 if (!ownershipByDc.containsKey(dc))
-                    ownershipByDc.put(dc, new LinkedHashMap<InetAddress, Float>());
-                ownershipByDc.get(dc).put(ownership.getKey(), ownership.getValue());
+                    ownershipByDc.put(dc, new SetHostStat());
+                ownershipByDc.get(dc).add(ownership);
             }
 
             return ownershipByDc;
@@ -434,12 +478,12 @@ public class NodeCmd
             return format;
         }
 
-        private void printNode(String endpoint, Float owns, Map<InetAddress, Float> ownerships,
+        private void printNode(HostStat hostStat,
                 boolean hasEffectiveOwns, boolean isTokenPerNode) throws UnknownHostException
         {
             String status, state, load, strOwns, hostID, rack, fmt;
             fmt = getFormat(hasEffectiveOwns, isTokenPerNode);
-
+            String endpoint = hostStat.ip;
             if      (liveNodes.contains(endpoint))        status = "U";
             else if (unreachableNodes.contains(endpoint)) status = "D";
             else                                          status = "?";
@@ -449,18 +493,18 @@ public class NodeCmd
             else                                          state = "N";
 
             load = loadMap.containsKey(endpoint) ? loadMap.get(endpoint) : "?";
-            strOwns = new DecimalFormat("##0.0%").format(ownerships.get(InetAddress.getByName(endpoint)));
+            strOwns = new DecimalFormat("##0.0%").format(hostStat.owns);
             hostID = hostIDMap.get(endpoint);
             rack = epSnitchInfo.getRack(endpoint);
 
             if (isTokenPerNode)
             {
-                outs.printf(fmt, status, state, endpoint, load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, strOwns, hostID, probe.getTokens(endpoint).get(0), rack);
             }
             else
             {
                 int tokens = probe.getTokens(endpoint).size();
-                outs.printf(fmt, status, state, endpoint, load, tokens, strOwns, hostID, rack);
+                outs.printf(fmt, status, state, hostStat.ipOrDns(), load, tokens, strOwns, hostID, rack);
             }
         }
 
@@ -475,42 +519,41 @@ public class NodeCmd
                 outs.printf(fmt, "-", "-", "Address", "Load", "Tokens", owns, "Host ID", "Rack");
         }
 
+        void findMaxAddressLength(Map<String, SetHostStat> dcs) {
+            maxAddressLength = 0;
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
+            {
+                for (HostStat stat : dc.getValue()) {
+                    maxAddressLength = Math.max(maxAddressLength, stat.ipOrDns().length());
+                }
+            }
+        }
+
         void print() throws UnknownHostException
         {
-            Map<InetAddress, Float> ownerships;
+            SetHostStat ownerships;
             boolean hasEffectiveOwns = false, isTokenPerNode = true;
 
             try
             {
-                ownerships = probe.effectiveOwnership(kSpace);
+                ownerships = new SetHostStat(probe.effectiveOwnership(kSpace));
                 hasEffectiveOwns = true;
             }
             catch (IllegalStateException e)
             {
-                ownerships = probe.getOwnership();
+                ownerships = new SetHostStat(probe.getOwnership());
             }
 
             // More tokens then nodes (aka vnodes)?
             if (new HashSet<String>(tokensToEndpoints.values()).size() < tokensToEndpoints.keySet().size())
                 isTokenPerNode = false;
 
-            maxAddressLength = 0;
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
-            {
-                int dcMaxAddressLength = Collections.max(dc.getValue().keySet(), new Comparator<InetAddress>() {
-                    @Override
-                    public int compare(InetAddress first, InetAddress second)
-                    {
-                        return ((Integer)first.getHostAddress().length()).compareTo((Integer)second.getHostAddress().length());
-                    }
-                }).getHostAddress().length();
+            Map<String, SetHostStat> dcs = getOwnershipByDc(ownerships);
 
-                if(dcMaxAddressLength > maxAddressLength)
-                    maxAddressLength = dcMaxAddressLength;
-            }
+            findMaxAddressLength(dcs);
 
             // Datacenters
-            for (Map.Entry<String, Map<InetAddress, Float>> dc : getOwnershipByDc(ownerships).entrySet())
+            for (Map.Entry<String, SetHostStat> dc : dcs.entrySet())
             {
                 String dcHeader = String.format("Datacenter: %s%n", dc.getKey());
                 outs.printf(dcHeader);
@@ -521,21 +564,17 @@ public class NodeCmd
                 printNodesHeader(hasEffectiveOwns, isTokenPerNode);
 
                 // Nodes
-                for (Map.Entry<InetAddress, Float> entry : dc.getValue().entrySet())
-                    printNode(entry.getKey().getHostAddress(),
-                              entry.getValue(),
-                              ownerships,
-                              hasEffectiveOwns,
-                              isTokenPerNode);
+                for (HostStat entry : dc.getValue())
+                    printNode(entry, hasEffectiveOwns, isTokenPerNode);
             }
         }
     }
 
     /** Writes a keyspaceName of cluster-wide node information to a PrintStream
      * @throws UnknownHostException */
-    public void printClusterStatus(PrintStream outs, String keyspace) throws UnknownHostException
+    public void printClusterStatus(PrintStream outs, String keyspace, boolean resolveIp) throws UnknownHostException
     {
-        new ClusterStatus(outs, keyspace).print();
+        new ClusterStatus(outs, keyspace, resolveIp).print();
     }
 
     public void printThreadPoolStats(PrintStream outs)
@@ -1125,8 +1164,9 @@ public class NodeCmd
                     break;
 
                 case STATUS :
-                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0]);
-                    else                      nodeCmd.printClusterStatus(System.out, null);
+                    boolean resolveIp = cmd.hasOption(RESOLVE_IP.left);
+                    if (arguments.length > 0) nodeCmd.printClusterStatus(System.out, arguments[0], resolveIp);
+                    else                      nodeCmd.printClusterStatus(System.out, null, resolveIp);
                     break;
 
                 case DECOMMISSION :