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