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 2010/11/17 01:01:44 UTC
svn commit: r1035864 - in /cassandra/branches/cassandra-0.7: ./
interface/thrift/gen-java/org/apache/cassandra/thrift/
src/java/org/apache/cassandra/db/ src/java/org/apache/cassandra/tools/
Author: jbellis
Date: Wed Nov 17 00:01:43 2010
New Revision: 1035864
URL: http://svn.apache.org/viewvc?rev=1035864&view=rev
Log:
add nodetool cfhistogram
patch by Pavel Yaskevich; reviewed by jbellis for CASSANDRA-1698
Modified:
cassandra/branches/cassandra-0.7/ (props changed)
cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java (props changed)
cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java (props changed)
cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java (props changed)
cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java (props changed)
cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java (props changed)
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java
Propchange: cassandra/branches/cassandra-0.7/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Nov 17 00:01:43 2010
@@ -1,4 +1,5 @@
/cassandra/branches/cassandra-0.6:922689-1035020,1035656
+/cassandra/branches/cassandra-0.7:1035666
/cassandra/trunk:1026516-1026734,1028929
/incubator/cassandra/branches/cassandra-0.3:774578-796573
/incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350
Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Nov 17 00:01:43 2010
@@ -1,4 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1035020,1035656
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1035666
/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1026734,1028929
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350
Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Nov 17 00:01:43 2010
@@ -1,4 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1035020,1035656
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1035666
/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1026734,1028929
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350
Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Nov 17 00:01:43 2010
@@ -1,4 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1035020,1035656
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1035666
/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1026734,1028929
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350
Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Nov 17 00:01:43 2010
@@ -1,4 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1035020,1035656
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1035666
/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1026734,1028929
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350
Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Nov 17 00:01:43 2010
@@ -1,4 +1,5 @@
/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1035020,1035656
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1035666
/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1026734,1028929
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1035864&r1=1035863&r2=1035864&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Wed Nov 17 00:01:43 2010
@@ -1832,4 +1832,34 @@ public class ColumnFamilyStore implement
{
return ssTables.estimatedKeys();
}
+
+ public long[] getEstimatedRowSizeHistogram()
+ {
+ long[] histogram = new long[90];
+
+ for (SSTableReader sstable : ssTables)
+ {
+ long[] rowSize = sstable.getEstimatedRowSize().get(false);
+
+ for (int i = 0; i < histogram.length; i++)
+ histogram[i] += rowSize[i];
+ }
+
+ return histogram;
+ }
+
+ public long[] getEstimatedColumnCountHistogram()
+ {
+ long[] histogram = new long[90];
+
+ for (SSTableReader sstable : ssTables)
+ {
+ long[] columnSize = sstable.getEstimatedColumnCount().get(false);
+
+ for (int i = 0; i < histogram.length; i++)
+ histogram[i] += columnSize[i];
+ }
+
+ return histogram;
+ }
}
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java?rev=1035864&r1=1035863&r2=1035864&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java Wed Nov 17 00:01:43 2010
@@ -212,4 +212,7 @@ public interface ColumnFamilyStoreMBean
public void setMemtableOperationsInMillions(double ops);
public long estimateKeys();
+
+ public long[] getEstimatedRowSizeHistogram();
+ public long[] getEstimatedColumnCountHistogram();
}
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java?rev=1035864&r1=1035863&r2=1035864&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java Wed Nov 17 00:01:43 2010
@@ -29,6 +29,7 @@ import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ExecutionException;
+import org.apache.cassandra.utils.EstimatedHistogram;
import org.apache.commons.cli.*;
import org.apache.cassandra.cache.JMXInstrumentedCacheMBean;
@@ -72,7 +73,7 @@ public class NodeCmd {
"clearsnapshot, tpstats, flush, drain, repair, decommission, move, loadbalance, removetoken [status|force]|[token], " +
"setcachecapacity [keyspace] [cfname] [keycachecapacity] [rowcachecapacity], " +
"getcompactionthreshold [keyspace] [cfname], setcompactionthreshold [cfname] [minthreshold] [maxthreshold], " +
- "netstats [host]");
+ "netstats [host], cfhistograms <keyspace> <column_family>");
String usage = String.format("java %s --host <arg> <command>%n", NodeCmd.class.getName());
hf.printHelp(usage, "", options, header);
}
@@ -354,6 +355,36 @@ public class NodeCmd {
outs.println("RemovalStatus: " + probe.getRemovalStatus());
}
+ private void printCfHistograms(String keySpace, String columnFamily, PrintStream output)
+ {
+ ColumnFamilyStoreMBean store = this.probe.getCfsProxy(keySpace, columnFamily);
+
+ // default is 90 offsets
+ long[] offsets = new EstimatedHistogram(90).getBucketOffsets();
+
+ long[] rrlh = store.getRecentReadLatencyHistogramMicros();
+ long[] rwlh = store.getRecentWriteLatencyHistogramMicros();
+ long[] sprh = store.getRecentSSTablesPerReadHistogram();
+ long[] ersh = store.getEstimatedRowSizeHistogram();
+ long[] ecch = store.getEstimatedColumnCountHistogram();
+
+ output.println(String.format("%s/%s histograms", keySpace, columnFamily));
+
+ output.println(String.format("%-10s%10s%18s%18s%18s%18s",
+ "Offset", "SSTables", "Write Latency", "Read Latency", "Row Size", "Column Count"));
+
+ for (int i = 0; i < offsets.length; i++)
+ {
+ output.println(String.format("%-10d%10s%18s%18s%18s%18s",
+ offsets[i],
+ (i < sprh.length ? sprh[i] : ""),
+ (i < rrlh.length ? rrlh[i] : ""),
+ (i < rwlh.length ? rwlh[i] : ""),
+ (i < ersh.length ? ersh[i] : ""),
+ (i < ecch.length ? ecch[i] : "")));
+ }
+ }
+
public static void main(String[] args) throws IOException, InterruptedException, ParseException
{
CommandLineParser parser = new PosixParser();
@@ -610,6 +641,16 @@ public class NodeCmd {
String otherHost = arguments.length > 1 ? arguments[1] : null;
nodeCmd.printNetworkStats(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 if (cmdName.equals("version"))
{
nodeCmd.printReleaseVersion(System.out);
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=1035864&r1=1035863&r2=1035864&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java Wed Nov 17 00:01:43 2010
@@ -452,17 +452,21 @@ public class NodeProbe
}
}
- private ColumnFamilyStoreMBean getCfsProxy(String ks, String cf) {
+ public ColumnFamilyStoreMBean getCfsProxy(String ks, String cf)
+ {
ColumnFamilyStoreMBean cfsProxy = null;
- try {
+ try
+ {
cfsProxy = JMX.newMBeanProxy(mbeanServerConn,
new ObjectName("org.apache.cassandra.db:type=ColumnFamilies,keyspace="+ks+",columnfamily="+cf),
ColumnFamilyStoreMBean.class);
}
- catch (MalformedObjectNameException mone) {
+ catch (MalformedObjectNameException mone)
+ {
System.err.println("ColumnFamilyStore for " + ks + "/" + cf + " not found.");
System.exit(1);
}
+
return cfsProxy;
}
}