Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.0 9649594c7 -> b0b64fd3c
  refs/heads/cassandra-2.1 a2497e1a2 -> 056f627e9
  refs/heads/trunk f34f712ad -> 3bb4c3033


'nodetool info' prints exception against older node

Patch by Robert Stupp; Reviewed by Philip Thompson for CASSANDRA-8796


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

Branch: refs/heads/cassandra-2.0
Commit: b0b64fd3c6506a8dab89e6c53c36652d9cee7723
Parents: 9649594
Author: Robert Stupp <sn...@snazy.de>
Authored: Thu Feb 12 21:57:48 2015 +0100
Committer: Robert Stupp <sn...@snazy.de>
Committed: Thu Feb 12 21:57:48 2015 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../org/apache/cassandra/tools/NodeCmd.java     | 49 ++++++++++++++++----
 2 files changed, 41 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/b0b64fd3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 861730f..aef3a1e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -11,6 +11,7 @@
  * Round up time deltas lower than 1ms in BulkLoader (CASSANDRA-8645)
  * Add batch remove iterator to ABSC (CASSANDRA-8414, 8666)
  * Fix isClientMode check in Keyspace (CASSANDRA-8687)
+ * 'nodetool info' prints exception against older node (CASSANDRA-8796)
 
 
 2.0.12:

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b0b64fd3/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 b085088..df53347 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -28,6 +28,7 @@ import java.util.*;
 import java.util.Map.Entry;
 import java.util.concurrent.ExecutionException;
 
+import javax.management.AttributeNotFoundException;
 import javax.management.openmbean.TabularData;
 
 import com.google.common.base.Joiner;
@@ -660,7 +661,16 @@ public class NodeCmd
         outs.printf("%-23s: %.2f / %.2f%n", "Heap Memory (MB)", memUsed, 
memMax);
 
         // Off heap memory usage
-        outs.printf("%-23s: %.2f%n", "Off Heap Memory (MB)", 
getOffHeapMemoryUsed());
+        try
+        {
+            outs.printf("%-23s: %.2f%n", "Off Heap Memory (MB)", 
getOffHeapMemoryUsed());
+        }
+        catch (RuntimeException e)
+        {
+            // offheap-metrics introduced in 2.1.3 - older versions do not 
have the appropriate mbeans
+            if (!(e.getCause() instanceof AttributeNotFoundException))
+                throw e;
+        }
 
         // Data Center/Rack
         outs.printf("%-23s: %s%n", "Data Center", probe.getDataCenter());
@@ -977,15 +987,33 @@ public class NodeCmd
                     }
                 }
 
-                long bloomFilterOffHeapSize = 
cfstore.getBloomFilterOffHeapMemoryUsed();
-                long indexSummaryOffHeapSize = 
cfstore.getIndexSummaryOffHeapMemoryUsed();
-                long compressionMetadataOffHeapSize = 
cfstore.getCompressionMetadataOffHeapMemoryUsed();
+                boolean hasOffHeapSizes;
+                long bloomFilterOffHeapSize = 0L;
+                long indexSummaryOffHeapSize = 0L;
+                long compressionMetadataOffHeapSize = 0L;
+                long offHeapSize = 0L;
+                try
+                {
+                    bloomFilterOffHeapSize = 
cfstore.getBloomFilterOffHeapMemoryUsed();
+                    indexSummaryOffHeapSize = 
cfstore.getIndexSummaryOffHeapMemoryUsed();
+                    compressionMetadataOffHeapSize = 
cfstore.getCompressionMetadataOffHeapMemoryUsed();
 
-                long offHeapSize = bloomFilterOffHeapSize + 
indexSummaryOffHeapSize + compressionMetadataOffHeapSize;
+                    offHeapSize = bloomFilterOffHeapSize + 
indexSummaryOffHeapSize + compressionMetadataOffHeapSize;
+
+                    hasOffHeapSizes = true;
+                }
+                catch (RuntimeException e)
+                {
+                    // offheap-metrics introduced in 2.1.3 - older versions do 
not have the appropriate mbeans
+                    if (!(e.getCause() instanceof AttributeNotFoundException))
+                        throw e;
+                    hasOffHeapSizes = false;
+                }
 
                 outs.println("\t\tSpace used (live), bytes: " + 
cfstore.getLiveDiskSpaceUsed());
                 outs.println("\t\tSpace used (total), bytes: " + 
cfstore.getTotalDiskSpaceUsed());
-                outs.println("\t\tOff heap memory used (total), bytes: " + 
offHeapSize);
+                if (hasOffHeapSizes)
+                    outs.println("\t\tOff heap memory used (total), bytes: " + 
offHeapSize);
                 outs.println("\t\tSSTable Compression Ratio: " + 
cfstore.getCompressionRatio());
                 outs.println("\t\tNumber of keys (estimate): " + 
cfstore.estimateKeys());
                 outs.println("\t\tMemtable cell count: " + 
cfstore.getMemtableColumnsCount());
@@ -999,9 +1027,12 @@ public class NodeCmd
                 outs.println("\t\tBloom filter false positives: " + 
cfstore.getBloomFilterFalsePositives());
                 outs.println("\t\tBloom filter false ratio: " + 
String.format("%01.5f", cfstore.getRecentBloomFilterFalseRatio()));
                 outs.println("\t\tBloom filter space used, bytes: " + 
cfstore.getBloomFilterDiskSpaceUsed());
-                outs.println("\t\tBloom filter off heap memory used, bytes: " 
+ bloomFilterOffHeapSize);
-                outs.println("\t\tIndex summary off heap memory used, bytes: " 
+ indexSummaryOffHeapSize);
-                outs.println("\t\tCompression metadata off heap memory used, 
bytes: " + compressionMetadataOffHeapSize);
+                if (hasOffHeapSizes)
+                {
+                    outs.println("\t\tBloom filter off heap memory used, 
bytes: " + bloomFilterOffHeapSize);
+                    outs.println("\t\tIndex summary off heap memory used, 
bytes: " + indexSummaryOffHeapSize);
+                    outs.println("\t\tCompression metadata off heap memory 
used, bytes: " + compressionMetadataOffHeapSize);
+                }
                 outs.println("\t\tCompacted partition minimum bytes: " + 
cfstore.getMinRowSize());
                 outs.println("\t\tCompacted partition maximum bytes: " + 
cfstore.getMaxRowSize());
                 outs.println("\t\tCompacted partition mean bytes: " + 
cfstore.getMeanRowSize());

Reply via email to