You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by yu...@apache.org on 2016/03/07 19:50:31 UTC

[09/15] cassandra git commit: Fix AssertionError in nodetool cfstats

Fix AssertionError in nodetool cfstats

Backport CASSANDRA-10859

patch by yukim; reviewed by Jeremiah Jordan for CASSANDRA-11297


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

Branch: refs/heads/trunk
Commit: 6e0395e5a8cc7642128685d6d41248798e2e952b
Parents: a956e9f
Author: Yuki Morishita <yu...@apache.org>
Authored: Wed Mar 2 13:19:05 2016 -0600
Committer: Yuki Morishita <yu...@apache.org>
Committed: Mon Mar 7 12:39:39 2016 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../tools/nodetool/TableHistograms.java         | 10 ++++------
 .../cassandra/utils/EstimatedHistogram.java     | 20 ++++++++++++++++++++
 3 files changed, 25 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6e0395e5/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index a6d6a14..89fa904 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.2.6
+ * Fix AE in nodetool cfstats (backport CASSANDRA-10859) (CASSANDRA-11297)
  * Unresolved hostname leads to replace being ignored (CASSANDRA-11210)
  * Fix filtering on non-primary key columns for thrift static column families
    (CASSANDRA-6377)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6e0395e5/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java b/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
index b152434..207a74e 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/TableHistograms.java
@@ -66,14 +66,12 @@ public class TableHistograms extends NodeToolCmd
         }
         else
         {
-            long[] rowSizeBucketOffsets = new EstimatedHistogram(estimatedRowSize.length).getBucketOffsets();
-            long[] columnCountBucketOffsets = new EstimatedHistogram(estimatedColumnCount.length).getBucketOffsets();
-            EstimatedHistogram rowSizeHist = new EstimatedHistogram(rowSizeBucketOffsets, estimatedRowSize);
-            EstimatedHistogram columnCountHist = new EstimatedHistogram(columnCountBucketOffsets, estimatedColumnCount);
+            EstimatedHistogram rowSizeHist = new EstimatedHistogram(estimatedRowSize);
+            EstimatedHistogram columnCountHist = new EstimatedHistogram(estimatedColumnCount);
 
             if (rowSizeHist.isOverflowed())
             {
-                System.err.println(String.format("Row sizes are larger than %s, unable to calculate percentiles", rowSizeBucketOffsets[rowSizeBucketOffsets.length - 1]));
+                System.err.println(String.format("Row sizes are larger than %s, unable to calculate percentiles", rowSizeHist.getLargestBucketOffset()));
                 for (int i = 0; i < offsetPercentiles.length; i++)
                         estimatedRowSizePercentiles[i] = Double.NaN;
             }
@@ -85,7 +83,7 @@ public class TableHistograms extends NodeToolCmd
 
             if (columnCountHist.isOverflowed())
             {
-                System.err.println(String.format("Column counts are larger than %s, unable to calculate percentiles", columnCountBucketOffsets[columnCountBucketOffsets.length - 1]));
+                System.err.println(String.format("Column counts are larger than %s, unable to calculate percentiles", columnCountHist.getLargestBucketOffset()));
                 for (int i = 0; i < estimatedColumnCountPercentiles.length; i++)
                     estimatedColumnCountPercentiles[i] = Double.NaN;
             }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6e0395e5/src/java/org/apache/cassandra/utils/EstimatedHistogram.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/EstimatedHistogram.java b/src/java/org/apache/cassandra/utils/EstimatedHistogram.java
index 6c929df..36048fb 100644
--- a/src/java/org/apache/cassandra/utils/EstimatedHistogram.java
+++ b/src/java/org/apache/cassandra/utils/EstimatedHistogram.java
@@ -66,6 +66,18 @@ public class EstimatedHistogram
         buckets = new AtomicLongArray(bucketOffsets.length + 1);
     }
 
+    /**
+     * Create EstimatedHistogram from only bucket data.
+     *
+     * @param bucketData bucket data
+     */
+    public EstimatedHistogram(long[] bucketData)
+    {
+        assert bucketData != null && bucketData.length > 0 : "Bucket data must be an array of size more than 0";
+        bucketOffsets = newOffsets(bucketData.length - 1, false);
+        buckets = new AtomicLongArray(bucketData);
+    }
+
     public EstimatedHistogram(long[] offsets, long[] bucketData)
     {
         assert bucketData.length == offsets.length +1;
@@ -243,6 +255,14 @@ public class EstimatedHistogram
     }
 
     /**
+     * @return the largest bucket offset
+     */
+    public long getLargestBucketOffset()
+    {
+        return bucketOffsets[bucketOffsets.length - 1];
+    }
+
+    /**
      * @return true if this histogram has overflowed -- that is, a value larger than our largest bucket could bound was added
      */
     public boolean isOverflowed()