Author: jbellis
Date: Tue Nov 16 15:54:03 2010
New Revision: 1035666

URL: http://svn.apache.org/viewvc?rev=1035666&view=rev
Log:
add nodetool cfhistogram
patch by Pavel Yaskevich; reviewed by jbellis for CASSANDRA-1698

Modified:
    cassandra/branches/cassandra-0.6/CHANGES.txt
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/EstimatedHistogram.java

Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=1035666&r1=1035665&r2=1035666&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Tue Nov 16 15:54:03 2010
@@ -3,6 +3,7 @@
    Windows .bat files (CASSANDRA-1723)
  * reject range queries received during bootstrap (CASSANDRA-1739)
  * fix wrapping-range queries on non-minimum token (CASSANDRA-1700)
+ * add nodetool cfhistogram (CASSANDRA-1698)
 
 
 0.6.8

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java?rev=1035666&r1=1035665&r2=1035666&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java
 Tue Nov 16 15:54:03 2010
@@ -21,29 +21,21 @@ package org.apache.cassandra.tools;
  */
 
 
-import java.io.IOException;
-import java.io.PrintStream;
-import java.lang.management.MemoryUsage;
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Map.Entry;
-import java.util.concurrent.ExecutionException;
-
 import org.apache.cassandra.cache.JMXInstrumentedCacheMBean;
 import org.apache.cassandra.concurrent.IExecutorMBean;
 import org.apache.cassandra.db.ColumnFamilyStoreMBean;
 import org.apache.cassandra.db.CompactionManager;
 import org.apache.cassandra.dht.Range;
-
+import org.apache.cassandra.utils.EstimatedHistogram;
 import org.apache.commons.cli.*;
-import org.apache.commons.lang.StringUtils;
+
+import java.io.IOException;
+import java.io.PrintStream;
+import java.lang.management.MemoryUsage;
+import java.net.InetAddress;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.concurrent.ExecutionException;
 
 public class NodeCmd {
     private static final String HOST_OPT_LONG = "host";
@@ -80,7 +72,7 @@ public class NodeCmd {
                 "tpstats, flush, drain, repair, decommission, move, 
loadbalance, removetoken, " +
                 "setcachecapacity <keyspace> <cfname> <keycachecapacity> 
<rowcachecapacity>, " +
                 "getcompactionthreshold, setcompactionthreshold [minthreshold] 
([maxthreshold])" +
-                "streams [host]");
+                "streams [host], cfhistograms <keyspace> <column_family>");
         String usage = String.format("java %s --host <arg> <command>%n", 
NodeCmd.class.getName());
         hf.printHelp(usage, "", options, header);
     }
@@ -366,6 +358,23 @@ public class NodeCmd {
             outs.println("----------------");
         }
     }
+
+    private void printCfHistograms(String keySpace, String columnFamily, 
PrintStream output)
+    {
+        ColumnFamilyStoreMBean store = 
this.probe.getColumnFamilyStoreMBean(keySpace, columnFamily);
+
+        long[] offsets = EstimatedHistogram.getBucketOffsets();
+
+        long[] rrlh = store.getRecentReadLatencyHistogramMicros();
+        long[] rwlh = store.getRecentWriteLatencyHistogramMicros();
+
+        output.println(String.format("%s/%s read/write latency histogram:", 
keySpace, columnFamily));
+        output.println(String.format("%-10s%18s%18s", "Bucket", "Read", 
"Write"));
+        for (int i = 0; i < offsets.length; i++)
+        {
+            output.println(String.format("%-10d%18d%18d", offsets[i], rrlh[i], 
rwlh[i]));
+        }
+    }
     
     public static void main(String[] args) throws IOException, 
InterruptedException, ParseException
     {
@@ -572,6 +581,16 @@ public class NodeCmd {
             String otherHost = arguments.length > 1 ? arguments[1] : null;
             nodeCmd.printStreamInfo(otherHost == null ? null : 
InetAddress.getByName(otherHost), System.out);
         }
+        else if (cmdName.equals("cfhistograms"))
+        {
+            if (arguments.length < 3)
+            {
+                System.err.println("Usage of cfhistograms: <keyspace> 
<column_family>.");
+                System.exit(1);
+            }
+
+            nodeCmd.printCfHistograms(arguments[1], arguments[2], System.out);
+        }
         else
         {
             System.err.println("Unrecognized command: " + cmdName + ".");

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=1035666&r1=1035665&r2=1035666&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java
 Tue Nov 16 15:54:03 2010
@@ -292,6 +292,26 @@ public class NodeProbe
         }
     }
 
+    /**
+     * Get MBean representing ColumnFamilyStore
+     * @param keySpace name of the keyspace
+     * @param cfName name of the column family
+     * @return ColumnFamilyStoreMBean
+     */
+    public ColumnFamilyStoreMBean getColumnFamilyStoreMBean(String keySpace, 
String cfName)
+    {
+        String path = 
String.format("org.apache.cassandra.db:type=ColumnFamilyStores,keyspace=%s,columnfamily=%s",
 keySpace, cfName);
+
+        try
+        {
+            return JMX.newMBeanProxy(mbeanServerConn, new ObjectName(path), 
ColumnFamilyStoreMBean.class);
+        }
+        catch (MalformedObjectNameException e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
     public String getToken()
     {
         return ssProxy.getToken();

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/EstimatedHistogram.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/EstimatedHistogram.java?rev=1035666&r1=1035665&r2=1035666&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/EstimatedHistogram.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/EstimatedHistogram.java
 Tue Nov 16 15:54:03 2010
@@ -74,4 +74,9 @@ public class EstimatedHistogram
 
         return rv;
     }
+
+    public static long[] getBucketOffsets()
+    {
+        return bucketOffsets;
+    }
 }


Reply via email to