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;
+ }
}