You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/09/15 01:08:35 UTC

svn commit: r1170893 - in /cassandra/branches/cassandra-1.0.0: CHANGES.txt build.xml conf/cassandra-env.sh src/java/org/apache/cassandra/db/Memtable.java

Author: jbellis
Date: Wed Sep 14 23:08:34 2011
New Revision: 1170893

URL: http://svn.apache.org/viewvc?rev=1170893&view=rev
Log:
Fix counting CFMetadata towards Memtable liveRatio
patch by jbellis; reviewed by brandonwilliams for CASSANDRA-3203

Modified:
    cassandra/branches/cassandra-1.0.0/CHANGES.txt
    cassandra/branches/cassandra-1.0.0/build.xml
    cassandra/branches/cassandra-1.0.0/conf/cassandra-env.sh
    cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/Memtable.java

Modified: cassandra/branches/cassandra-1.0.0/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/CHANGES.txt?rev=1170893&r1=1170892&r2=1170893&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0.0/CHANGES.txt Wed Sep 14 23:08:34 2011
@@ -1,3 +1,7 @@
+1.0.0-rc1
+ * Fix counting CFMetadata towards Memtable liveRatio (CASSANDRA-3023)
+
+
 1.0.0-beta1
  * removed binarymemtable (CASSANDRA-2692)
  * add commitlog_total_space_in_mb to prevent fragmented logs (CASSANDRA-2427)

Modified: cassandra/branches/cassandra-1.0.0/build.xml
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/build.xml?rev=1170893&r1=1170892&r2=1170893&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0.0/build.xml (original)
+++ cassandra/branches/cassandra-1.0.0/build.xml Wed Sep 14 23:08:34 2011
@@ -366,7 +366,7 @@ url=${svn.entry.url}?pathrev=${svn.entry
           </dependency>
           <dependency groupId="com.googlecode.json-simple" artifactId="json-simple" version="1.1"/>
           <dependency groupId="com.github.stephenc.high-scale-lib" artifactId="high-scale-lib" version="1.1.2"/>
-          <dependency groupId="com.github.stephenc" artifactId="jamm" version="0.2.4"/>
+          <dependency groupId="com.github.stephenc" artifactId="jamm" version="0.2.5"/>
           <dependency groupId="org.yaml" artifactId="snakeyaml" version="1.6"/>
           <dependency groupId="org.apache.cassandra.deps" artifactId="avro" version="1.4.0-cassandra-1">
             <exclusion groupId="org.jboss.netty" artifactId="netty"/>
@@ -1002,7 +1002,7 @@ url=${svn.entry.url}?pathrev=${svn.entry
         <jvmarg value="-Dstorage-config=${test.conf}"/>
         <jvmarg value="-Daccess.properties=${test.conf}/access.properties"/>
         <jvmarg value="-Dlog4j.configuration=log4j-junit.properties" />
-        <jvmarg value="-javaagent:${basedir}/lib/jamm-0.2.4.jar" />
+        <jvmarg value="-javaagent:${basedir}/lib/jamm-0.2.5.jar" />
         <jvmarg value="-ea"/>
         <optjvmargs/>
         <classpath>

Modified: cassandra/branches/cassandra-1.0.0/conf/cassandra-env.sh
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/conf/cassandra-env.sh?rev=1170893&r1=1170892&r2=1170893&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0.0/conf/cassandra-env.sh (original)
+++ cassandra/branches/cassandra-1.0.0/conf/cassandra-env.sh Wed Sep 14 23:08:34 2011
@@ -100,7 +100,7 @@ JVM_OPTS="$JVM_OPTS -ea"
 check_openjdk=`"${JAVA:-java}" -version 2>&1 | awk '{if (NR == 2) {print $1}}'`
 if [ "$check_openjdk" != "OpenJDK" ]
 then
-    JVM_OPTS="$JVM_OPTS -javaagent:$CASSANDRA_HOME/lib/jamm-0.2.4.jar"
+    JVM_OPTS="$JVM_OPTS -javaagent:$CASSANDRA_HOME/lib/jamm-0.2.5.jar"
 fi
 
 # enable thread priorities, primarily so we can give periodic tasks

Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/Memtable.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/Memtable.java?rev=1170893&r1=1170892&r2=1170893&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/Memtable.java (original)
+++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/Memtable.java Wed Sep 14 23:08:34 2011
@@ -21,10 +21,7 @@ package org.apache.cassandra.db;
 import java.io.File;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -55,7 +52,6 @@ public class Memtable
     private static final double MIN_SANE_LIVE_RATIO = 1.0;
     // max liveratio seen w/ 1-byte columns on a 64-bit jvm was 19. If it gets higher than 64 something is probably broken.
     private static final double MAX_SANE_LIVE_RATIO = 64.0;
-    private static final MemoryMeter meter = new MemoryMeter().omitSharedBufferOverhead();
 
     // we're careful to only allow one count to run at a time because counting is slow
     // (can be minutes, for a large memtable and a busy server), so we could keep memtables
@@ -70,6 +66,8 @@ public class Memtable
         }
     };
 
+    private final MemoryMeter meter;
+
     volatile static Memtable activelyMeasuring;
 
     private volatile boolean isFrozen;
@@ -84,6 +82,18 @@ public class Memtable
     public Memtable(ColumnFamilyStore cfs)
     {
         this.cfs = cfs;
+
+        Callable<Set<Object>> provider = new Callable<Set<Object>>()
+        {
+            public Set<Object> call() throws Exception
+            {
+                // avoid counting this once for each row
+                Set<Object> set = Collections.newSetFromMap(new IdentityHashMap<Object, Boolean>());
+                set.add(Memtable.this.cfs.metadata);
+                return set;
+            }
+        };
+        meter = new MemoryMeter().omitSharedBufferOverhead().withTrackerProvider(provider);
     }
 
     public long getLiveSize()