From 05ffa8ff1eeaa8f911798c1dca14de6117b27347 Mon Sep 17 00:00:00 2001 From: Sam Tunnicliffe Date: Wed, 4 Jun 2014 17:56:50 +0300 Subject: [PATCH] Add per-CF range read request latency metrics patch by Sam Tunnicliffe; reviewed by Aleksey Yeschenko for CASSANDRA-7338 --- CHANGES.txt | 1 + .../org/apache/cassandra/db/ColumnFamilyStore.java | 10 +++++++++- .../apache/cassandra/metrics/ColumnFamilyMetrics.java | 4 ++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 18579a190e..0d716a64e1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.9 + * Add per-CF range read request latency metrics (CASSANDRA-7338) * Fix NPE in StreamTransferTask.createMessageForRetry() (CASSANDRA-7323) * Add conditional CREATE/DROP USER support (CASSANDRA-7264) * Swap local and global default read repair chances (CASSANDRA-7320) diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 709935adc1..c641f3a711 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -1703,7 +1703,15 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public List getRangeSlice(ExtendedFilter filter) { - return filter(getSequentialIterator(filter.dataRange, filter.timestamp), filter); + long start = System.nanoTime(); + try + { + return filter(getSequentialIterator(filter.dataRange, filter.timestamp), filter); + } + finally + { + metric.rangeLatency.addNano(System.nanoTime() - start); + } } @VisibleForTesting diff --git a/src/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java b/src/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java index 8880485a30..50c80fc0be 100644 --- a/src/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java +++ b/src/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java @@ -52,6 +52,8 @@ public class ColumnFamilyMetrics public final Histogram sstablesPerReadHistogram; /** (Local) read metrics */ public final LatencyMetrics readLatency; + /** (Local) range slice metrics */ + public final LatencyMetrics rangeLatency; /** (Local) write metrics */ public final LatencyMetrics writeLatency; /** Estimated number of tasks pending for this column family */ @@ -177,6 +179,7 @@ public class ColumnFamilyMetrics }); readLatency = new LatencyMetrics(factory, "Read"); writeLatency = new LatencyMetrics(factory, "Write"); + rangeLatency = new LatencyMetrics(factory, "Range"); pendingCompactions = Metrics.newGauge(factory.createMetricName("PendingCompactions"), new Gauge() { public Integer value() @@ -343,6 +346,7 @@ public class ColumnFamilyMetrics { readLatency.release(); writeLatency.release(); + rangeLatency.release(); Metrics.defaultRegistry().removeMetric(factory.createMetricName("AllMemtablesDataSize")); Metrics.defaultRegistry().removeMetric(factory.createMetricName("MemtableColumnsCount")); Metrics.defaultRegistry().removeMetric(factory.createMetricName("MemtableDataSize"));