You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2011/10/27 18:20:59 UTC

svn commit: r1189831 - in /cassandra/branches/cassandra-1.0: CHANGES.txt src/java/org/apache/cassandra/db/ColumnFamilyStore.java src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java

Author: slebresne
Date: Thu Oct 27 16:20:58 2011
New Revision: 1189831

URL: http://svn.apache.org/viewvc?rev=1189831&view=rev
Log:
Make reloading the compaction strategy safe
patch by slebresne; reviewed by jbellis for CASSANDRA-3409

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/compaction/AbstractCompactionStrategy.java

Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1189831&r1=1189830&r2=1189831&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Thu Oct 27 16:20:58 2011
@@ -27,6 +27,7 @@
  * Break bloom filters up to avoid heap fragmentation (CASSANDRA-2466)
  * fix cassandra hanging on jsvc stop (CASSANDRA-3302)
  * Avoid leveled compaction getting blocked on errors (CASSANDRA-3408)
+ * Make reloading the compaction strategy safe (CASSANDRA-3409)
 Merged from 0.8:
  * (CQL) update grammar to require key clause in DELETE statement
    (CASSANDRA-3349)

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=1189831&r1=1189830&r2=1189831&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 Oct 27 16:20:58 2011
@@ -178,8 +178,7 @@ public class ColumnFamilyStore implement
         if (!rowCacheKeysToSave.isModified())
             rowCacheKeysToSave = new DefaultInteger(metadata.getRowCacheKeysToSave());
 
-        compactionStrategy.shutdown();
-        compactionStrategy = metadata.createCompactionStrategyInstance(this);
+        maybeReloadCompactionStrategy();
 
         updateCacheSizes();
         scheduleCacheSaving(rowCacheSaveInSeconds.value(), keyCacheSaveInSeconds.value(), rowCacheKeysToSave.value());
@@ -187,6 +186,24 @@ public class ColumnFamilyStore implement
         indexManager.reload();
     }
 
+    private void maybeReloadCompactionStrategy()
+    {
+        // Check if there is a need for reloading
+        if (metadata.compactionStrategyClass.equals(compactionStrategy.getClass()) && metadata.compactionStrategyOptions.equals(compactionStrategy.getOptions()))
+            return;
+
+        CompactionManager.instance.getCompactionLock().lock();
+        try
+        {
+            compactionStrategy.shutdown();
+            compactionStrategy = metadata.createCompactionStrategyInstance(this);
+        }
+        finally
+        {
+            CompactionManager.instance.getCompactionLock().unlock();
+        }
+    }
+
     private ColumnFamilyStore(Table table, String columnFamilyName, IPartitioner partitioner, int generation, CFMetaData metadata)
     {
         assert metadata != null : "null metadata for " + table + ":" + columnFamilyName;

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java?rev=1189831&r1=1189830&r2=1189831&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java Thu Oct 27 16:20:58 2011
@@ -63,6 +63,11 @@ public abstract class AbstractCompaction
         StorageService.optionalTasks.schedule(runnable, 5 * 60, TimeUnit.SECONDS);
     }
 
+    public Map<String, String> getOptions()
+    {
+        return options;
+    }
+
     /**
      * Releases any resources if this strategy is shutdown (when the CFS is reloaded after a schema change).
      * Default is to do nothing.