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(); + } }