This is an automated email from the ASF dual-hosted git repository.

paulo pushed a commit to branch cassandra-4.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.0 by this push:
     new c420d75  CASSANDRA-16308: Add droppable tombstone metrics to nodetool 
tablestats
c420d75 is described below

commit c420d754d8571120e58b2fe4838c766d26169d7d
Author: tejavadali <kvada...@bloomberg.net>
AuthorDate: Sun Dec 12 22:31:15 2021 +0530

    CASSANDRA-16308: Add droppable tombstone metrics to nodetool tablestats
    
    patch by Krishna Vadali; reviewed by Paulo Motta and Brandon Williams for 
CASSANDRA-16308
    
    Closes #1359
---
 CHANGES.txt                                                        | 1 +
 src/java/org/apache/cassandra/tools/NodeProbe.java                 | 5 +++++
 src/java/org/apache/cassandra/tools/nodetool/stats/StatsTable.java | 1 +
 .../apache/cassandra/tools/nodetool/stats/TableStatsHolder.java    | 3 +++
 .../apache/cassandra/tools/nodetool/stats/TableStatsPrinter.java   | 1 +
 .../cassandra/tools/nodetool/stats/TableStatsPrinterTest.java      | 6 ++++++
 .../apache/cassandra/tools/nodetool/stats/TableStatsTestBase.java  | 7 +++++++
 7 files changed, 24 insertions(+)

diff --git a/CHANGES.txt b/CHANGES.txt
index 77d2737..aa3b707 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0.2
+ * Add droppable tombstone metrics to nodetool tablestats (CASSANDRA-16308)
  * Fix disk failure triggered when enabling FQL on an unclean directory 
(CASSANDRA-17136)
  * Fixed broken classpath when multiple jars in build directory 
(CASSANDRA-17129)
  * DebuggableThreadPoolExecutor does not propagate client warnings 
(CASSANDRA-17072)
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java 
b/src/java/org/apache/cassandra/tools/NodeProbe.java
index 9b221e9..101aab3 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -467,6 +467,11 @@ public class NodeProbe implements AutoCloseable
         return result;
     }
 
+    public double getDroppableTombstoneRatio(String keyspace, String table) {
+        ColumnFamilyStoreMBean cfsProxy = getCfsProxy(keyspace, table);
+        return cfsProxy.getDroppableTombstoneRatio();
+    }
+
     public void invalidateCounterCache()
     {
         cacheService.invalidateCounterCache();
diff --git a/src/java/org/apache/cassandra/tools/nodetool/stats/StatsTable.java 
b/src/java/org/apache/cassandra/tools/nodetool/stats/StatsTable.java
index d897eab..0859327 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/stats/StatsTable.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/stats/StatsTable.java
@@ -70,4 +70,5 @@ public class StatsTable
     public String droppedMutations;
     public List<String> sstablesInEachLevel = new ArrayList<>();
     public Boolean isInCorrectLocation = null; // null: option not active
+    public double droppableTombstoneRatio;
 }
diff --git 
a/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsHolder.java 
b/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsHolder.java
index b1685e6..a587738 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsHolder.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsHolder.java
@@ -161,6 +161,8 @@ public class TableStatsHolder implements StatsHolder
         mpTable.put("maximum_tombstones_per_slice_last_five_minutes",
                     table.maximumTombstonesPerSliceLastFiveMinutes);
         mpTable.put("dropped_mutations", table.droppedMutations);
+        mpTable.put("droppable_tombstone_ratio",
+                    String.format("%01.5f", table.droppableTombstoneRatio));
         if (locationCheck)
             mpTable.put("sstables_in_correct_location", 
table.isInCorrectLocation);
         return mpTable;
@@ -345,6 +347,7 @@ public class TableStatsHolder implements StatsHolder
                 statsTable.averageTombstonesPerSliceLastFiveMinutes = 
histogram.getMean();
                 statsTable.maximumTombstonesPerSliceLastFiveMinutes = 
histogram.getMax();
                 statsTable.droppedMutations = format((Long) 
probe.getColumnFamilyMetric(keyspaceName, tableName, "DroppedMutations"), 
humanReadable);
+                statsTable.droppableTombstoneRatio = 
probe.getDroppableTombstoneRatio(keyspaceName, tableName);
                 statsKeyspace.tables.add(statsTable);
             }
             keyspaces.add(statsKeyspace);
diff --git 
a/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsPrinter.java 
b/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsPrinter.java
index f4188e4..d8e4d4a 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsPrinter.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsPrinter.java
@@ -126,6 +126,7 @@ public class TableStatsPrinter<T extends StatsHolder>
             out.println(indent + "Average tombstones per slice (last five 
minutes): " + table.averageTombstonesPerSliceLastFiveMinutes);
             out.println(indent + "Maximum tombstones per slice (last five 
minutes): " + table.maximumTombstonesPerSliceLastFiveMinutes);
             out.println(indent + "Dropped Mutations: " + 
table.droppedMutations);
+            out.printf(indent + "Droppable tombstone ratio: %01.5f%n", 
table.droppableTombstoneRatio);
             if (table.isInCorrectLocation != null)
                 out.println(indent + "SSTables in correct location: " + 
table.isInCorrectLocation);
             out.println("");
diff --git 
a/test/unit/org/apache/cassandra/tools/nodetool/stats/TableStatsPrinterTest.java
 
b/test/unit/org/apache/cassandra/tools/nodetool/stats/TableStatsPrinterTest.java
index 992f711..d67ef5d 100644
--- 
a/test/unit/org/apache/cassandra/tools/nodetool/stats/TableStatsPrinterTest.java
+++ 
b/test/unit/org/apache/cassandra/tools/nodetool/stats/TableStatsPrinterTest.java
@@ -63,6 +63,7 @@ public class TableStatsPrinterTest extends TableStatsTestBase
         "\tAverage tombstones per slice (last five minutes): 5.0\n" +
         "\tMaximum tombstones per slice (last five minutes): 1\n" +
         "\tDropped Mutations: 0\n" +
+        "\tDroppable tombstone ratio: 0.00000\n" +
         "\n";
 
     public static final String expectedDefaultTable2Output =
@@ -102,6 +103,7 @@ public class TableStatsPrinterTest extends 
TableStatsTestBase
         "\tAverage tombstones per slice (last five minutes): 4.001\n" +
         "\tMaximum tombstones per slice (last five minutes): 2\n" +
         "\tDropped Mutations: 222\n" +
+        "\tDroppable tombstone ratio: 0.22222\n" +
         "\n";
 
     public static final String expectedDefaultTable3Output =
@@ -136,6 +138,7 @@ public class TableStatsPrinterTest extends 
TableStatsTestBase
         "\tAverage tombstones per slice (last five minutes): NaN\n" +
         "\tMaximum tombstones per slice (last five minutes): 3\n" +
         "\tDropped Mutations: 33333\n" +
+        "\tDroppable tombstone ratio: 0.33333\n" +
         "\n";
 
     public static final String expectedDefaultTable4Output =
@@ -175,6 +178,7 @@ public class TableStatsPrinterTest extends 
TableStatsTestBase
         "\tAverage tombstones per slice (last five minutes): 0.0\n" +
         "\tMaximum tombstones per slice (last five minutes): 3\n" +
         "\tDropped Mutations: 4444\n" +
+        "\tDroppable tombstone ratio: 0.44444\n" +
         "\n";
 
     public static final String expectedDefaultTable5Output =
@@ -209,6 +213,7 @@ public class TableStatsPrinterTest extends 
TableStatsTestBase
         "\tAverage tombstones per slice (last five minutes): 4.01\n" +
         "\tMaximum tombstones per slice (last five minutes): 5\n" +
         "\tDropped Mutations: 0\n" +
+        "\tDroppable tombstone ratio: 0.55556\n" +
         "\n";
 
     public static final String expectedDefaultTable6Output =
@@ -248,6 +253,7 @@ public class TableStatsPrinterTest extends 
TableStatsTestBase
         "\tAverage tombstones per slice (last five minutes): 6.0\n" +
         "\tMaximum tombstones per slice (last five minutes): 6\n" +
         "\tDropped Mutations: 666666\n" +
+        "\tDroppable tombstone ratio: 0.66667\n" +
         "\n";
 
     /**
diff --git 
a/test/unit/org/apache/cassandra/tools/nodetool/stats/TableStatsTestBase.java 
b/test/unit/org/apache/cassandra/tools/nodetool/stats/TableStatsTestBase.java
index 1721a01..8ef0ea3 100644
--- 
a/test/unit/org/apache/cassandra/tools/nodetool/stats/TableStatsTestBase.java
+++ 
b/test/unit/org/apache/cassandra/tools/nodetool/stats/TableStatsTestBase.java
@@ -294,6 +294,13 @@ public class TableStatsTestBase
         table4.sstableCount = 2000;
         table5.sstableCount = 40000;
         table6.sstableCount = 1000;
+        // Droppable Tombstone ratio
+        table1.droppableTombstoneRatio = 0;
+        table2.droppableTombstoneRatio = 0.222222;
+        table3.droppableTombstoneRatio = 0.333333;
+        table4.droppableTombstoneRatio = 0.444444;
+        table5.droppableTombstoneRatio = 0.555555;
+        table6.droppableTombstoneRatio = 0.666666;
         // set even numbered tables to have some offheap usage
         table2.offHeapUsed = true;
         table4.offHeapUsed = true;

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to