You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2016/06/23 09:18:46 UTC
[2/3] cassandra git commit: Add a metrics timer to MemtablePool and
use it to track time spent blocked on memory in MemtableAllocator.
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/trunk
Commit: 458b36b5a5390a2dd6ddc24af3a85179e95faebf
Parents: 0d7eb18
Author: Ariel Weisberg <ar...@datastax.com>
Authored: Mon Jun 13 21:58:38 2016 -0400
Committer: Sylvain Lebresne <sy...@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");