You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/10/07 18:23:20 UTC

svn commit: r822790 - in /incubator/cassandra/trunk/src/java/org/apache/cassandra: dht/Range.java net/EndPoint.java service/StorageService.java service/StorageServiceMBean.java tools/NodeProbe.java utils/FileUtils.java

Author: jbellis
Date: Wed Oct  7 16:23:20 2009
New Revision: 822790

URL: http://svn.apache.org/viewvc?rev=822790&view=rev
Log:
use Strings instead of Endpoints in jmx methods. merge cluster info into ring.
patch by jbellis; reviewed by Eric Evans for CASSANDRA-385

Modified:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/net/EndPoint.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/utils/FileUtils.java

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java?rev=822790&r1=822789&r2=822790&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java Wed Oct  7 16:23:20 2009
@@ -23,10 +23,8 @@
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.List;
-import java.math.BigInteger;
 
 import org.apache.cassandra.io.ICompactSerializer;
-import org.apache.cassandra.service.StorageService;
 
 
 /**

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/net/EndPoint.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/net/EndPoint.java?rev=822790&r1=822789&r2=822790&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/net/EndPoint.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/net/EndPoint.java Wed Oct  7 16:23:20 2009
@@ -19,7 +19,6 @@
 package org.apache.cassandra.net;
 
 
-import java.io.IOException;
 import java.io.Serializable;
 import java.net.*;
 import java.nio.ByteBuffer;
@@ -28,7 +27,6 @@
 import java.util.Map;
 
 import org.apache.cassandra.utils.FBUtilities;
-import org.apache.cassandra.utils.LogUtil;
 import org.apache.log4j.Logger;
 
 public class EndPoint implements Serializable, Comparable<EndPoint>
@@ -47,10 +45,10 @@
         try
         {
             sentinelLocalEndPoint_ = new EndPoint(FBUtilities.getHostAddress(), EndPoint.sentinelPort_);
-        }        
-        catch ( IOException ex )
+        }
+        catch (UnknownHostException e)
         {
-            logger_.warn(LogUtil.throwableToString(ex));
+            throw new AssertionError(e);
         }
     }
 

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=822790&r1=822789&r2=822790&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Wed Oct  7 16:23:20 2009
@@ -357,13 +357,18 @@
         consistencyManager_.submit(consistencySentinel);
     }
 
-    public Map<Range, List<EndPoint>> getRangeToEndPointMap()
+    public Map<Range, List<String>> getRangeToEndPointMap()
     {
         /* Get the token to endpoint map. */
         Map<Token, EndPoint> tokenToEndPointMap = tokenMetadata_.cloneTokenEndPointMap();
         /* All the ranges for the tokens */
         Range[] ranges = getAllRanges(tokenToEndPointMap.keySet());
-        return constructRangeToEndPointMap(ranges);
+        Map<Range, List<String>> map = new HashMap<Range, List<String>>();
+        for (Map.Entry<Range,List<EndPoint>> entry : constructRangeToEndPointMap(ranges).entrySet())
+        {
+            map.put(entry.getKey(), stringify(entry.getValue()));
+        }
+        return map;
     }
 
     /**
@@ -626,31 +631,39 @@
         return tokenMetadata_.getToken(StorageService.tcpAddr_).toString();
     }
 
-    public String getLiveNodes()
+    public Set<String> getLiveNodes()
     {
         return stringify(Gossiper.instance().getLiveMembers());
     }
 
-    public String getUnreachableNodes()
+    public Set<String> getUnreachableNodes()
     {
         return stringify(Gossiper.instance().getUnreachableMembers());
     }
-    
-    public int getCurrentGenerationNumber()
+
+    private Set<String> stringify(Set<EndPoint> endPoints)
     {
-        return Gossiper.instance().getCurrentGenerationNumber(udpAddr_);
+        Set<String> stringEndPoints = new HashSet<String>();
+        for (EndPoint ep : endPoints)
+        {
+            stringEndPoints.add(ep.getHost());
+        }
+        return stringEndPoints;
     }
 
-    /* Helper for the MBean interface */
-    private String stringify(Set<EndPoint> eps)
+    private List<String> stringify(List<EndPoint> endPoints)
     {
-        StringBuilder sb = new StringBuilder("");
-        for (EndPoint ep : eps)
+        List<String> stringEndPoints = new ArrayList<String>();
+        for (EndPoint ep : endPoints)
         {
-            sb.append(ep);
-            sb.append(" ");
+            stringEndPoints.add(ep.getHost());
         }
-        return sb.toString();
+        return stringEndPoints;
+    }
+
+    public int getCurrentGenerationNumber()
+    {
+        return Gossiper.instance().getCurrentGenerationNumber(udpAddr_);
     }
 
     public void bootstrapNodes(String nodes) throws UnknownHostException

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=822790&r1=822789&r2=822790&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java Wed Oct  7 16:23:20 2009
@@ -22,6 +22,8 @@
 import java.net.UnknownHostException;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+
 import org.apache.cassandra.dht.Range;
 import org.apache.cassandra.net.EndPoint;
 
@@ -30,21 +32,19 @@
 {    
     /**
      * Retrieve the list of live nodes in the cluster, where "liveness" is
-     * determined by the failure detector of the node being queried. The
-     * returned string is a space delimited list of host:port end points.
+     * determined by the failure detector of the node being queried.
      *
-     * @return space delimited list of nodes
+     * @return set of IP addresses, as Strings
      */
-    public String getLiveNodes();
+    public Set<String> getLiveNodes();
 
     /**
      * Retrieve the list of unreachable nodes in the cluster, as determined
-     * by this node's failure detector. The returned string is a space
-     * delimited list of host:port end points.
+     * by this node's failure detector.
      *
-     * @return space delimited list of nodes
+     * @return set of IP addresses, as Strings
      */
-    public String getUnreachableNodes();
+    public Set<String> getUnreachableNodes();
 
     /**
      * Fetch a string representation of the token.
@@ -59,7 +59,7 @@
      *
      * @return mapping of ranges to end points
      */
-    public Map<Range, List<EndPoint>> getRangeToEndPointMap();
+    public Map<Range, List<String>> getRangeToEndPointMap();
 
     /** Human-readable load value */
     public String getLoadString();

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=822790&r1=822789&r2=822790&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java Wed Oct  7 16:23:20 2009
@@ -200,25 +200,37 @@
      */
     public void printRing(PrintStream outs)
     {
-        Map<Range, List<EndPoint>> rangeMap = ssProxy.getRangeToEndPointMap();
+        Map<Range, List<String>> rangeMap = ssProxy.getRangeToEndPointMap();
         List<Range> ranges = new ArrayList<Range>(rangeMap.keySet());
         Collections.sort(ranges);
-        
+        Set<String> liveNodes = ssProxy.getLiveNodes();
+        Set<String> deadNodes = ssProxy.getUnreachableNodes();
+
         // Print range-to-endpoint mapping
         int counter = 0;
-        outs.print(String.format("%-46s ", "Starting Token"));
-        outs.print(String.format("%-44s ", "Ending Token"));
-        outs.print(String.format("%-4s ", "Size"));
-        outs.print(String.format("%-15s", "Address"));
+        outs.print(String.format("%-14s", "Address"));
+        outs.print(String.format("%-11s", "Status"));
+        outs.print(String.format("%-43s", "Range"));
         outs.println("Ring");
+        // emphasize that we're showing the right part of each range
+        if (ranges.size() > 1)
+        {
+            outs.println(String.format("%-14s%-11s%-43s", "", "", ranges.get(0).left()));
+        }
+        // normal range & node info
         for (Range range : ranges) {
-            List<EndPoint> endpoints = rangeMap.get(range);
-            
-            outs.print(String.format("%-46s ", range.left()));
-            outs.print(String.format("%-46s ", range.right()));
-            outs.print(String.format("%2d ", endpoints.size()));
-            outs.print(String.format("%-15s", endpoints.get(0).getHost()));
-            
+            List<String> endpoints = rangeMap.get(range);
+            String primaryEndpoint = endpoints.get(0);
+
+            outs.print(String.format("%-14s", primaryEndpoint));
+            String status = liveNodes.contains(primaryEndpoint)
+                            ? "Up"
+                            : deadNodes.contains(primaryEndpoint)
+                              ? "Down"
+                              : "?";
+            outs.print(String.format("%-11s", status));
+            outs.print(String.format("%-43s", range.right()));
+
             String asciiRingArt;
             if (counter == 0)
             {
@@ -231,17 +243,11 @@
             else
             {
                 if ((rangeMap.size() > 4) && ((counter % 2) == 0))
-                {
                     asciiRingArt = "v   |";
-                }
                 else if ((rangeMap.size() > 4) && ((counter % 2) != 0))
-                {
                     asciiRingArt = "|   ^";
-                }
                 else
-                {
                     asciiRingArt = "|   |";
-                }
             }
             outs.println(asciiRingArt);
             
@@ -333,30 +339,6 @@
     }
 
     /**
-     * Write a list of nodes with corresponding status.
-     * 
-     * @param outs the stream to write to
-     */
-    public void printCluster(PrintStream outs)
-    {
-        for (String upNode : ssProxy.getLiveNodes().split("\\s+"))
-        {
-            if (upNode.length() > 0)
-            {
-                outs.println(String.format("%-21s up", upNode));
-            }
-        }
-
-        for (String downNode : ssProxy.getUnreachableNodes().split("\\s+"))
-        {
-            if (downNode.length() > 0)
-            {
-                outs.println(String.format("%-21s down", downNode));
-            }
-        }
-    }
-    
-    /**
      * Write node information.
      * 
      * @param outs the stream to write to
@@ -523,10 +505,6 @@
         {
             probe.printRing(System.out);
         }
-        else if (cmdName.equals("cluster"))
-        {
-            probe.printCluster(System.out);
-        }
         else if (cmdName.equals("info"))
         {
             probe.printInfo(System.out);
@@ -562,11 +540,11 @@
             {
                 probe.bootstrapNodes(arguments[1]);
             }
-            else 
+            else
             {
                 System.err.println(cmdName + " needs a node to work with");
                 NodeProbe.printUsage();
-                System.exit(1);                
+                System.exit(1);
             }
         }
         else if (cmdName.equals("tpstats"))
@@ -584,7 +562,7 @@
             probe.forceTableFlushBinary(probe.getArgs()[1]);
         }
         else if (cmdName.equals("getcompactionthreshold"))
-        {   
+        {
             probe.getCompactionThreshold(System.out);
         }
         else if (cmdName.equals("setcompactionthreshold"))
@@ -598,7 +576,7 @@
             int minthreshold = Integer.parseInt(arguments[1]);
             int maxthreshold = 0;
             if (arguments.length > 2)
-            {   
+            {
                 maxthreshold = Integer.parseInt(arguments[2]);
             }
             probe.setCompactionThreshold(minthreshold, maxthreshold);

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/utils/FileUtils.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/utils/FileUtils.java?rev=822790&r1=822789&r2=822790&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/utils/FileUtils.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/utils/FileUtils.java Wed Oct  7 16:23:20 2009
@@ -175,7 +175,7 @@
         else
         {       
             String val = df_.format(value);
-            return val + " bytes.";
+            return val + " bytes";
         }        
     }