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");