Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 0d7eb1878 -> 458b36b5a refs/heads/trunk 465702399 -> 5c84fe4f9
Add a metrics timer to MemtablePool and use it to track time spent blocked on memory in MemtableAllocator. patch by aweisberg; reviewed by cnlwsu for CASSANDRA-11327 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/458b36b5 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/458b36b5 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/458b36b5 Branch: refs/heads/cassandra-3.0 Commit: 458b36b5a5390a2dd6ddc24af3a85179e95faebf Parents: 0d7eb18 Author: Ariel Weisberg <ariel.weisb...@datastax.com> Authored: Mon Jun 13 21:58:38 2016 -0400 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Thu Jun 23 11:16:09 2016 +0200 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/utils/memory/MemtableAllocator.java | 2 +- .../org/apache/cassandra/utils/memory/MemtablePool.java | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/458b36b5/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index ddbac69..ee2f6d3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.8 + * Add a metrics timer to MemtablePool and use it to track time spent blocked on memory in MemtableAllocator (CASSANDRA-11327) * Fix upgrading schema with super columns with non-text subcomparators (CASSANDRA-12023) * Add TimeWindowCompactionStrategy (CASSANDRA-9666) Merged from 2.2: http://git-wip-us.apache.org/repos/asf/cassandra/blob/458b36b5/src/java/org/apache/cassandra/utils/memory/MemtableAllocator.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/memory/MemtableAllocator.java b/src/java/org/apache/cassandra/utils/memory/MemtableAllocator.java index 588b433..5a64c3c 100644 --- a/src/java/org/apache/cassandra/utils/memory/MemtableAllocator.java +++ b/src/java/org/apache/cassandra/utils/memory/MemtableAllocator.java @@ -183,7 +183,7 @@ public abstract class MemtableAllocator acquired(size); return; } - WaitQueue.Signal signal = opGroup.isBlockingSignal(parent.hasRoom().register()); + WaitQueue.Signal signal = opGroup.isBlockingSignal(parent.hasRoom().register(parent.blockedTimerContext())); boolean allocated = parent.tryAllocate(size); if (allocated || opGroup.isBlocking()) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/458b36b5/src/java/org/apache/cassandra/utils/memory/MemtablePool.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/memory/MemtablePool.java b/src/java/org/apache/cassandra/utils/memory/MemtablePool.java index bb85884..e792944 100644 --- a/src/java/org/apache/cassandra/utils/memory/MemtablePool.java +++ b/src/java/org/apache/cassandra/utils/memory/MemtablePool.java @@ -20,6 +20,9 @@ package org.apache.cassandra.utils.memory; import java.util.concurrent.atomic.AtomicLongFieldUpdater; +import com.codahale.metrics.Timer; +import org.apache.cassandra.metrics.CassandraMetricsRegistry; +import org.apache.cassandra.metrics.DefaultNameFactory; import org.apache.cassandra.utils.concurrent.WaitQueue; @@ -35,6 +38,8 @@ public abstract class MemtablePool public final SubPool onHeap; public final SubPool offHeap; + public final Timer blockedOnAllocating; + final WaitQueue hasRoom = new WaitQueue(); MemtablePool(long maxOnHeapMemory, long maxOffHeapMemory, float cleanThreshold, Runnable cleaner) @@ -42,6 +47,8 @@ public abstract class MemtablePool this.onHeap = getSubPool(maxOnHeapMemory, cleanThreshold); this.offHeap = getSubPool(maxOffHeapMemory, cleanThreshold); this.cleaner = getCleaner(cleaner); + blockedOnAllocating = CassandraMetricsRegistry.Metrics.timer(new DefaultNameFactory("MemtablePool") + .createMetricName("BlockedOnAllocation")); if (this.cleaner != null) this.cleaner.start(); } @@ -209,6 +216,11 @@ public abstract class MemtablePool { return hasRoom; } + + public Timer.Context blockedTimerContext() + { + return blockedOnAllocating.time(); + } } private static final AtomicLongFieldUpdater<SubPool> reclaimingUpdater = AtomicLongFieldUpdater.newUpdater(SubPool.class, "reclaiming");