Author: jake
Date: Thu Dec 22 16:14:12 2011
New Revision: 1222317
URL: http://svn.apache.org/viewvc?rev=1222317&view=rev
Log:
Flush non-cfs backed secondary indexes along with memtables
Patch by tjake; reviewed by xedin for: CASSANDRA-3659
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/SecondaryIndexManager.java
Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1222317&r1=1222316&r2=1222317&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Thu Dec 22 16:14:12 2011
@@ -7,6 +7,7 @@
(CASSANDRA-3335)
Merged from 0.8:
* prevent new nodes from thinking down nodes are up forever (CASSANDRA-3626)
+ * Flush non-cfs backed secondary indexes (CASSANDRA-3659)
1.0.6
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=1222317&r1=1222316&r2=1222317&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
Thu Dec 22 16:14:12 2011
@@ -49,6 +49,7 @@ import org.apache.cassandra.db.compactio
import org.apache.cassandra.db.filter.IFilter;
import org.apache.cassandra.db.filter.QueryFilter;
import org.apache.cassandra.db.filter.QueryPath;
+import org.apache.cassandra.db.index.SecondaryIndex;
import org.apache.cassandra.db.index.SecondaryIndexManager;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.dht.*;
@@ -673,7 +674,7 @@ public class ColumnFamilyStore implement
logger.debug("flush position is {}", ctx);
// submit the memtable for any indexed sub-cfses, and our own.
- List<ColumnFamilyStore> icc = new ArrayList<ColumnFamilyStore>();
+ final List<ColumnFamilyStore> icc = new
ArrayList<ColumnFamilyStore>();
// don't assume that this.memtable is dirty; forceFlush can bring
us here during index build even if it is not
for (ColumnFamilyStore cfs : concatWithIndexes())
{
@@ -705,6 +706,19 @@ public class ColumnFamilyStore implement
public void runMayThrow() throws InterruptedException,
IOException
{
latch.await();
+
+ if (!icc.isEmpty())
+ {
+ //only valid when memtables exist
+
+ for (SecondaryIndex index :
indexManager.getIndexesNotBackedByCfs())
+ {
+ // flush any non-cfs backed indexes
+ logger.info("Flushing SecondaryIndex {}", index);
+ index.forceBlockingFlush();
+ }
+ }
+
if (writeCommitLog)
{
// if we're not writing to the commit log, we are
replaying the log, so marking
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=1222317&r1=1222316&r2=1222317&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
Thu Dec 22 16:14:12 2011
@@ -308,7 +308,27 @@ public class SecondaryIndexManager
return cfsList;
}
-
+ /**
+ * @return all indexes which do *not* use a backing CFS internally
+ */
+ public Collection<SecondaryIndex> getIndexesNotBackedByCfs()
+ {
+ // 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())
+ {
+ ColumnFamilyStore cfs = entry.getValue().getIndexCfs();
+
+ if (cfs == null)
+ indexList.put(entry.getValue(), null);
+ }
+
+ return indexList.keySet();
+ }
+
+
/**
* Removes obsolete index entries and creates new ones for the given row
key
* and mutated columns.