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)