Author: jbellis
Date: Wed Sep 14 01:27:16 2011
New Revision: 1170408

URL: http://svn.apache.org/viewvc?rev=1170408&view=rev
Log:
Add five-minute delay before starting compactions on a restarted server
patch by jbellis; reviewed by bcoverston for CASSANDRA-3181

Modified:
    cassandra/branches/cassandra-1.0.0/CHANGES.txt
    cassandra/branches/cassandra-1.0.0/NEWS.txt
    
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
    
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java

Modified: cassandra/branches/cassandra-1.0.0/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/CHANGES.txt?rev=1170408&r1=1170407&r2=1170408&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0.0/CHANGES.txt Wed Sep 14 01:27:16 2011
@@ -72,6 +72,8 @@
  * Add RowLevel support to secondary index API (CASSANDRA-3147)
  * Make SerializingCacheProvider the default if JNA is available 
(CASSANDRA-3183)
  * Fix backwards compatibilty for CQL memtable properties (CASSANDRA-3190)
+ * Add five-minute delay before starting compactions on a restarted server
+   (CASSANDRA-3181)
 
 
 0.8.6

Modified: cassandra/branches/cassandra-1.0.0/NEWS.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/NEWS.txt?rev=1170408&r1=1170407&r2=1170408&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0.0/NEWS.txt (original)
+++ cassandra/branches/cassandra-1.0.0/NEWS.txt Wed Sep 14 01:27:16 2011
@@ -60,6 +60,10 @@ Other
       This does not affect client compatibility -- the old options are
       still allowed, but have no effect.  These options may be removed
       entirely in a future release.
+    - Backlogged compactions will begin five minutes after startup.  The 0.8
+      behavior of never starting compaction until a flush happens is usually
+      not what is desired, but a short grace period is useful to allow caches
+      to warm up first.
 
 
 0.8.5

Modified: 
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java?rev=1170408&r1=1170407&r2=1170408&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
 (original)
+++ 
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
 Wed Sep 14 01:27:16 2011
@@ -18,21 +18,14 @@
 
 package org.apache.cassandra.db.compaction;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.db.Table;
 import org.apache.cassandra.db.ColumnFamilyStore;
 import org.apache.cassandra.io.sstable.SSTableReader;
-import org.apache.cassandra.utils.DefaultInteger;
-import org.apache.cassandra.utils.Pair;
+import org.apache.cassandra.service.StorageService;
 
 
 /**
@@ -53,6 +46,19 @@ public abstract class AbstractCompaction
         assert cfs != null;
         this.cfs = cfs;
         this.options = options;
+
+        // start compactions in five minutes (if no flushes have occurred by 
then to do so)
+        Runnable runnable = new Runnable()
+        {
+            public void run()
+            {
+                if (CompactionManager.instance.getActiveCompactions() == 0)
+                {
+                    
CompactionManager.instance.submitBackground(AbstractCompactionStrategy.this.cfs);
+                }
+            }
+        };
+        StorageService.tasks.schedule(runnable, 5 * 60, TimeUnit.SECONDS);
     }
 
     /**

Modified: 
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java?rev=1170408&r1=1170407&r2=1170408&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
 (original)
+++ 
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
 Wed Sep 14 01:27:16 2011
@@ -29,24 +29,6 @@ public class LeveledCompactionStrategy e
     private final int maxSSTableSize;
     private final AtomicReference<LeveledCompactionTask> task = new 
AtomicReference<LeveledCompactionTask>();
 
-    public class ScheduledBackgroundCompaction implements Runnable
-    {
-        ColumnFamilyStore cfs;
-
-        public ScheduledBackgroundCompaction(ColumnFamilyStore cfs)
-        {
-            this.cfs = cfs;
-        }
-
-        public void run()
-        {
-            if (CompactionManager.instance.getActiveCompactions() == 0)
-            {
-                CompactionManager.instance.submitBackground(cfs);
-            }
-        }
-    }
-
     public LeveledCompactionStrategy(ColumnFamilyStore cfs, Map<String, 
String> options)
     {
         super(cfs, options);
@@ -76,13 +58,11 @@ public class LeveledCompactionStrategy e
         // override min/max for this strategy
         cfs.setMaximumCompactionThreshold(Integer.MAX_VALUE);
         cfs.setMinimumCompactionThreshold(1);
-
-        DebuggableScheduledThreadPoolExecutor st = 
StorageService.scheduledTasks;
-        st.scheduleAtFixedRate(new ScheduledBackgroundCompaction(cfs), 10000, 
3000, TimeUnit.MILLISECONDS);
     }
 
     public void shutdown()
     {
+        super.shutdown();
         cfs.getDataTracker().unsubscribe(this);
     }
 
@@ -110,7 +90,7 @@ public class LeveledCompactionStrategy e
 
     public List<AbstractCompactionTask> getMaximalTasks(int gcBefore)
     {
-        return Collections.emptyList();
+        return getBackgroundTasks(gcBefore);
     }
 
     public AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> 
sstables, int gcBefore)


Reply via email to