You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2012/09/19 13:15:37 UTC

[4/4] git commit: Backport proxyhistograms to 1.1, print zero instead of blank values. Patch by Alexey Zotov, reviewed by brandonwilliams for CASSANDRA-4656

Backport proxyhistograms to 1.1, print zero instead of blank values.
Patch by Alexey Zotov, reviewed by brandonwilliams for CASSANDRA-4656


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b43cc362
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b43cc362
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b43cc362

Branch: refs/heads/cassandra-1.1
Commit: b43cc362aa568a46bc53e545c68518b0bd350b76
Parents: e6326e9
Author: Brandon Williams <br...@apache.org>
Authored: Wed Sep 19 06:11:22 2012 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Sep 19 06:11:22 2012 -0500

----------------------------------------------------------------------
 .../org/apache/cassandra/service/StorageProxy.java |    3 +-
 src/java/org/apache/cassandra/tools/NodeCmd.java   |   39 +++++++++++++--
 src/java/org/apache/cassandra/tools/NodeProbe.java |   12 +++-
 3 files changed, 45 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/b43cc362/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index 23e0de4..bc45e84 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -63,6 +63,7 @@ import org.apache.cassandra.utils.*;
 
 public class StorageProxy implements StorageProxyMBean
 {
+    public static final String MBEAN_NAME = "org.apache.cassandra.db:type=StorageProxy";
     private static final Logger logger = LoggerFactory.getLogger(StorageProxy.class);
     private static final boolean OPTIMIZE_LOCAL_REQUESTS = true; // set to false to test messagingservice path on single node
 
@@ -99,7 +100,7 @@ public class StorageProxy implements StorageProxyMBean
         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
         try
         {
-            mbs.registerMBean(new StorageProxy(), new ObjectName("org.apache.cassandra.db:type=StorageProxy"));
+            mbs.registerMBean(new StorageProxy(), new ObjectName(MBEAN_NAME));
         }
         catch (Exception e)
         {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b43cc362/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index d0ec068..4d2790d 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -33,6 +33,7 @@ import java.util.Map.Entry;
 import java.util.concurrent.ExecutionException;
 
 import org.apache.cassandra.service.CacheServiceMBean;
+import org.apache.cassandra.service.StorageProxyMBean;
 import org.apache.commons.cli.*;
 
 import org.apache.cassandra.concurrent.JMXEnabledThreadPoolExecutorMBean;
@@ -107,6 +108,7 @@ public class NodeCmd
         JOIN,
         MOVE,
         NETSTATS,
+        PROXYHISTOGRAMS,
         REBUILD,
         REFRESH,
         REMOVETOKEN,
@@ -145,6 +147,7 @@ public class NodeCmd
         addCmdHelp(header, "cfstats", "Print statistics on column families");
         addCmdHelp(header, "version", "Print cassandra version");
         addCmdHelp(header, "tpstats", "Print usage statistics of thread pools");
+        addCmdHelp(header, "proxyhistograms", "Print statistic histograms for network operations");
         addCmdHelp(header, "drain", "Drain the node (stop accepting writes and flush all column families)");
         addCmdHelp(header, "decommission", "Decommission the *node I am connecting to*");
         addCmdHelp(header, "compactionstats", "Print statistics on compactions");
@@ -600,14 +603,35 @@ public class NodeCmd
         {
             output.println(String.format("%-10d%10s%18s%18s%18s%18s",
                                          offsets[i],
-                                         (i < sprh.length ? sprh[i] : ""),
-                                         (i < rwlh.length ? rwlh[i] : ""),
-                                         (i < rrlh.length ? rrlh[i] : ""),
-                                         (i < ersh.length ? ersh[i] : ""),
-                                         (i < ecch.length ? ecch[i] : "")));
+                                         (i < sprh.length ? sprh[i] : "0"),
+                                         (i < rwlh.length ? rwlh[i] : "0"),
+                                         (i < rrlh.length ? rrlh[i] : "0"),
+                                         (i < ersh.length ? ersh[i] : "0"),
+                                         (i < ecch.length ? ecch[i] : "0")));
         }
     }
 
+    private void printProxyHistograms(PrintStream output)
+        {
+            StorageProxyMBean sp = this.probe.getSpProxy();
+            long[] offsets = new EstimatedHistogram().getBucketOffsets();
+            long[] rrlh = sp.getRecentReadLatencyHistogramMicros();
+            long[] rwlh = sp.getRecentWriteLatencyHistogramMicros();
+            long[] rrnglh = sp.getRecentRangeLatencyHistogramMicros();
+
+            output.println("proxy histograms");
+            output.println(String.format("%-10s%10s%18s%18s",
+                                        "Offset", "Read Latency", "Write Latency", "Range Latency"));
+            for (int i = 0; i < offsets.length; i++)
+            {
+                output.println(String.format("%-10d%18s%18s%18s",
+                                            offsets[i],
+                                            (i < rrlh.length ? rrlh[i] : "0"),
+                                            (i < rwlh.length ? rwlh[i] : "0"),
+                                            (i < rrnglh.length ? rrnglh[i] : "0")));
+            }
+    }
+
     private void printEndPoints(String keySpace, String cf, String key, PrintStream output)
     {
         List<InetAddress> endpoints = this.probe.getEndpoints(keySpace, cf, key);
@@ -845,6 +869,11 @@ public class NodeCmd
                     nodeCmd.printSSTables(arguments[0], arguments[1], arguments[2], System.out);
                     break;
 
+                case PROXYHISTOGRAMS :
+                    if (arguments.length != 0) { badUse("proxyhistograms does not take arguments"); }
+                    nodeCmd.printProxyHistograms(System.out);
+                    break;
+
                 case REFRESH:
                     if (arguments.length != 2) { badUse("load_new_sstables requires ks and cf args"); }
                     probe.loadNewSSTables(arguments[0], arguments[1]);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b43cc362/src/java/org/apache/cassandra/tools/NodeProbe.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java
index c40891c..3ed4524 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -47,9 +47,7 @@ import org.apache.cassandra.gms.FailureDetectorMBean;
 import org.apache.cassandra.locator.EndpointSnitchInfoMBean;
 import org.apache.cassandra.net.MessagingService;
 import org.apache.cassandra.net.MessagingServiceMBean;
-import org.apache.cassandra.service.CacheService;
-import org.apache.cassandra.service.CacheServiceMBean;
-import org.apache.cassandra.service.StorageServiceMBean;
+import org.apache.cassandra.service.*;
 import org.apache.cassandra.streaming.StreamingService;
 import org.apache.cassandra.streaming.StreamingServiceMBean;
 import org.apache.cassandra.thrift.InvalidRequestException;
@@ -78,6 +76,7 @@ public class NodeProbe
     public MessagingServiceMBean msProxy;
     private FailureDetectorMBean fdProxy;
     private CacheServiceMBean cacheService;
+    private StorageProxyMBean spProxy;
 
     /**
      * Creates a NodeProbe using the specified JMX host, port, username, and password.
@@ -156,6 +155,8 @@ public class NodeProbe
             fdProxy = JMX.newMBeanProxy(mbeanServerConn, name, FailureDetectorMBean.class);
             name = new ObjectName(CacheService.MBEAN_NAME);
             cacheService = JMX.newMBeanProxy(mbeanServerConn, name, CacheServiceMBean.class);
+            name = new ObjectName(StorageProxy.MBEAN_NAME);
+            spProxy = JMX.newMBeanProxy(mbeanServerConn, name, StorageProxyMBean.class);
         } catch (MalformedObjectNameException e)
         {
             throw new RuntimeException(
@@ -552,6 +553,11 @@ public class NodeProbe
         return cfsProxy;
     }
 
+    public StorageProxyMBean getSpProxy()
+    {
+        return spProxy;
+    }
+
     public String getEndpoint()
     {
         // Try to find the endpoint using the local token, doing so in a crazy manner