Author: gdusbabek
Date: Wed Oct 20 12:59:05 2010
New Revision: 1025543

URL: http://svn.apache.org/viewvc?rev=1025543&view=rev
Log:
fix drop race with flush. patch by gdusbabek, reviewed by jbellis. 
CASSANDRA-1631

Modified:
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
    cassandra/trunk/src/java/org/apache/cassandra/db/Table.java

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1025543&r1=1025542&r2=1025543&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Wed 
Oct 20 12:59:05 2010
@@ -569,6 +569,9 @@ public class ColumnFamilyStore implement
         {
             if (oldMemtable.isFrozen())
                 return null;
+            
+            if (DatabaseDescriptor.getCFMetaData(metadata.cfId) == null)
+                return null; // column family was dropped. no point in 
flushing.
 
             assert memtable == oldMemtable;
             memtable.freeze();

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java?rev=1025543&r1=1025542&r2=1025543&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java Wed 
Oct 20 12:59:05 2010
@@ -507,7 +507,15 @@ public class CompactionManager implement
             {
                 for (ColumnFamilyStore cfs : stores)
                 {
-                    cfs.table.dropCf(cfs.metadata.cfId);
+                    Table.flusherLock.writeLock().lock();
+                    try
+                    {
+                        cfs.table.dropCf(cfs.metadata.cfId);
+                    }
+                    finally
+                    {
+                        Table.flusherLock.writeLock().unlock();
+                    }
                 }
                 return null;
             }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=1025543&r1=1025542&r2=1025543&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Wed Oct 20 
12:59:05 2010
@@ -58,7 +58,7 @@ public class Table
 
     /**
      * accesses to CFS.memtable should acquire this for thread safety.
-     * only Table.maybeSwitchMemtable should aquire the writeLock; see that 
method for the full explanation.
+     * Table.maybeSwitchMemtable should aquire the writeLock; see that method 
for the full explanation.
      */
     static final ReentrantReadWriteLock flusherLock = new 
ReentrantReadWriteLock(true);
 


Reply via email to