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