Author: jake
Date: Fri Dec 23 19:10:54 2011
New Revision: 1222806

URL: http://svn.apache.org/viewvc?rev=1222806&view=rev
Log:
Secondary Indexes should report memory consumption
Patch by tjake; reviewed by jbellis for CASSANDRA-3155


Modified:
    cassandra/branches/cassandra-1.0/CHANGES.txt
    
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
    
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
    
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java

Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1222806&r1=1222805&r2=1222806&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Fri Dec 23 19:10:54 2011
@@ -14,7 +14,7 @@ Merged from 0.8:
  * avoid logging (harmless) exception when GC takes < 1ms (CASSANDRA-3656)
  * prevent new nodes from thinking down nodes are up forever (CASSANDRA-3626)
  * Flush non-cfs backed secondary indexes (CASSANDRA-3659)
-
+ * Secondary Indexes should report memory consumption (CASSANDRA-3155)
 
 1.0.6
  * (CQL) fix cqlsh support for replicate_on_write (CASSANDRA-3596)

Modified: 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1222806&r1=1222805&r2=1222806&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 (original)
+++ 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 Fri Dec 23 19:10:54 2011
@@ -1028,10 +1028,7 @@ public class ColumnFamilyStore implement
 
     public long getTotalMemtableLiveSize()
     {
-        long total = 0;
-        for (ColumnFamilyStore cfs : concatWithIndexes())
-            total += cfs.getMemtableThreadSafe().getLiveSize();
-        return total;
+        return getMemtableDataSize() + indexManager.getTotalLiveSize();
     }
 
     public int getMemtableSwitchCount()

Modified: 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java?rev=1222806&r1=1222805&r2=1222806&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
 (original)
+++ 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
 Fri Dec 23 19:10:54 2011
@@ -112,6 +112,11 @@ public abstract class SecondaryIndex
     public abstract void forceBlockingFlush() throws IOException;
 
     /**
+     * Get current amount of memory this index is consuming (in bytes)
+     */
+    public abstract long getLiveSize();
+    
+    /**
      * Allow access to the underlying column family store if there is one
      * @return the underlying column family store or null
      */

Modified: 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java?rev=1222806&r1=1222805&r2=1222806&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
 (original)
+++ 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
 Fri Dec 23 19:10:54 2011
@@ -328,6 +328,27 @@ public class SecondaryIndexManager
         return indexList.keySet();
     }
     
+    /**
+     * @return total current ram size of all indexes
+     */
+    public long getTotalLiveSize()
+    {
+        long total = 0;
+        
+        // we use identity map because per row indexes use same instance
+        // across many columns
+        IdentityHashMap<SecondaryIndex, Object> indexList = new 
IdentityHashMap<SecondaryIndex, Object>();
+
+        for (Map.Entry<ByteBuffer, SecondaryIndex> entry : 
indexesByColumn.entrySet())
+        {
+            SecondaryIndex index = entry.getValue();
+            
+            if (indexList.put(index, index) == null)
+                total += index.getLiveSize();
+        }
+        
+        return total;
+    }
     
     /**
      * Removes obsolete index entries and creates new ones for the given row 
key

Modified: 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java?rev=1222806&r1=1222805&r2=1222806&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java
 (original)
+++ 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java
 Fri Dec 23 19:10:54 2011
@@ -152,4 +152,9 @@ public class KeysIndex extends PerColumn
     {
         // no options used
     }
+
+    public long getLiveSize()
+    {
+        return indexCfs.getMemtableDataSize();
+    }
 }


Reply via email to