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)