Author: jbellis
Date: Wed Oct 19 13:32:53 2011
New Revision: 1186208

URL: http://svn.apache.org/viewvc?rev=1186208&view=rev
Log:
acquire references during index build
patch by jbellis; reviewed by slebresne for CASSANDRA-3314

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

Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1186208&r1=1186207&r2=1186208&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Wed Oct 19 13:32:53 2011
@@ -1,4 +1,6 @@
 1.0.1
+ * acquire references during index build to prevent delete problems
+   on Windows (CASSANDRA-3314)
  * describe_ring should include datacenter/topology information 
(CASSANDRA-2882)
  * Thrift sockets are not properly buffered (CASSANDRA-3261)
  * performance improvement for bytebufferutil compare function (CASSANDRA-3286)

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=1186208&r1=1186207&r2=1186208&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
 Wed Oct 19 13:32:53 2011
@@ -562,8 +562,8 @@ public class ColumnFamilyStore implement
         }
 
         logger.info("Loading new SSTable Set for " + table.name + "/" + 
columnFamily + ": " + sstables);
+        SSTableReader.acquireReferences(sstables);
         data.addSSTables(sstables); // this will call updateCacheSizes() for us
-
         logger.info("Requesting a full secondary index re-build for " + 
table.name + "/" + columnFamily);
         try
         {
@@ -573,6 +573,10 @@ public class ColumnFamilyStore implement
         {
            throw new IOError(e);
         }
+        finally
+        {
+            SSTableReader.releaseReferences(sstables);
+        }
 
         logger.info("Setting up new generation: " + generation);
         fileIndexGenerator.set(generation);

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=1186208&r1=1186207&r2=1186208&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
 Wed Oct 19 13:32:53 2011
@@ -30,6 +30,7 @@ import org.apache.cassandra.db.SystemTab
 import org.apache.cassandra.db.compaction.CompactionManager;
 import org.apache.cassandra.db.index.keys.KeysIndex;
 import org.apache.cassandra.io.sstable.ReducingKeyIterator;
+import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -149,11 +150,11 @@ public abstract class SecondaryIndex
         
         for (ColumnDefinition cdef : columnDefs)
             columnNames.add(cdef.name);
-        
+
+        Collection<SSTableReader> sstables = 
baseCfs.markCurrentSSTablesReferenced();
         SecondaryIndexBuilder builder = new SecondaryIndexBuilder(baseCfs,
                                                                   columnNames,
-                                                                  new 
ReducingKeyIterator(baseCfs.getSSTables()));
-
+                                                                  new 
ReducingKeyIterator(sstables));
         Future<?> future = 
CompactionManager.instance.submitIndexBuild(builder);
         try
         {
@@ -179,6 +180,10 @@ public abstract class SecondaryIndex
         {
             throw new IOException(e);
         }
+        finally
+        {
+            SSTableReader.releaseReferences(sstables);
+        }
         logger.info("Index build of " + getIndexName() + " complete");
     }
 


Reply via email to