diff --git a/CHANGES.txt b/CHANGES.txt index 98e3fc8966..23f36c89ce 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,7 @@ * Don't fail streams on failure detector downs (CASSANDRA-3569) * Add optional keyspace to DROP INDEX statement (CASSANDRA-7314) Merged from 2.0: + * Add per-CF range read request latency metrics (CASSANDRA-7338) * Fix NPE in StreamTransferTask.createMessageForRetry() (CASSANDRA-7323) * Make StreamSession#closeSession() idempotent (CASSANDRA-7262) * Fix infinite loop on exception while streaming (CASSANDRA-7330) diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 4d334e7a17..e2d92488b2 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -2030,10 +2030,15 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public List getRangeSlice(ExtendedFilter filter) { + long start = System.nanoTime(); try (OpOrder.Group op = readOrdering.start()) { 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 f080fd0d34..f4682da509 100644 --- a/src/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java +++ b/src/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java @@ -59,6 +59,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 */ @@ -233,6 +235,7 @@ public class ColumnFamilyMetrics }); readLatency = new LatencyMetrics(factory, "Read"); writeLatency = new LatencyMetrics(factory, "Write"); + rangeLatency = new LatencyMetrics(factory, "Range"); pendingFlushes = Metrics.newCounter(factory.createMetricName("PendingFlushes")); pendingCompactions = Metrics.newGauge(factory.createMetricName("PendingCompactions"), new Gauge() { @@ -404,6 +407,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"));