Updated Branches: refs/heads/cassandra-1.2 3b41d21d9 -> fe10ba7df refs/heads/trunk 740e344c7 -> 1aa55abb0
Ensure that submitBackground enqueues at least one task patch by Oleg Anastasyev; reviewed by jbellis for CASSANDRA-5554 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3b41d21d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3b41d21d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3b41d21d Branch: refs/heads/trunk Commit: 3b41d21d9b997530e48511e1d09ea904e8937bf0 Parents: 5692797 Author: Jonathan Ellis <[email protected]> Authored: Mon May 13 11:51:56 2013 -0500 Committer: Jonathan Ellis <[email protected]> Committed: Mon May 13 13:45:10 2013 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/db/compaction/CompactionManager.java | 23 ++++++++------- 2 files changed, 13 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/3b41d21d/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 844fe3d..740d8e3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 1.2.5 + * Ensure that submitBackground enqueues at least one task (CASSANDRA-5554) * fix 2i updates with identical values and timestamps (CASSANDRA-5540) * fix compaction throttling bursty-ness (CASSANDRA-4316) * reduce memory consumption of IndexSummary (CASSANDRA-5506) http://git-wip-us.apache.org/repos/asf/cassandra/blob/3b41d21d/src/java/org/apache/cassandra/db/compaction/CompactionManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java index 96c3011..7ebbc7c 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java @@ -149,8 +149,8 @@ public class CompactionManager implements CompactionManagerMBean /** * Call this whenever a compaction might be needed on the given columnfamily. - * It's okay to over-call (within reason) since the compactions are single-threaded, - * and if a call is unnecessary, it will just be no-oped in the bucketing phase. + * It's okay to over-call (within reason) if a call is unnecessary, it will + * turn into a no-op in the bucketing/candidate-scan phase. */ public List<Future<?>> submitBackground(final ColumnFamilyStore cfs) { @@ -158,21 +158,23 @@ public class CompactionManager implements CompactionManagerMBean if (count > 0 && executor.getActiveCount() >= executor.getMaximumPoolSize()) { logger.debug("Background compaction is still running for {}.{} ({} remaining). Skipping", - new Object[] {cfs.table.name, cfs.columnFamily, count}); + cfs.table.name, cfs.columnFamily, count); return Collections.emptyList(); } logger.debug("Scheduling a background task check for {}.{} with {}", - new Object[] {cfs.table.name, - cfs.columnFamily, - cfs.getCompactionStrategy().getClass().getSimpleName()}); + cfs.table.name, + cfs.columnFamily, + cfs.getCompactionStrategy().getClass().getSimpleName()); List<Future<?>> futures = new ArrayList<Future<?>>(); - // if we have room for more compactions, then fill up executor - while (executor.getActiveCount() + futures.size() < executor.getMaximumPoolSize()) - { + + // we must schedule it at least once, otherwise compaction will stop for a CF until next flush + do { futures.add(executor.submit(new BackgroundCompactionTask(cfs))); compactingCF.add(cfs); - } + // if we have room for more compactions, then fill up executor + } while (executor.getActiveCount() + futures.size() < executor.getMaximumPoolSize()); + return futures; } @@ -590,7 +592,6 @@ public class CompactionManager implements CompactionManagerMBean throw new IOException("disk full"); SSTableScanner scanner = sstable.getDirectScanner(getRateLimiter()); - long rowsRead = 0; List<IColumn> indexedColumnsInRow = null; CleanupInfo ci = new CleanupInfo(sstable, scanner);
