diff --git a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionTask.java b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionTask.java index dbcd8cdeff..1449c87ea5 100644 --- a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionTask.java +++ b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionTask.java @@ -84,4 +84,9 @@ public abstract class AbstractCompactionTask // Can be overriden for action that need to be performed if the task won't // execute (if sstable can't be marked successfully) protected void cancel() {} + + public String toString() + { + return "CompactionTask(" + sstables + ")"; + } } diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java index 55fab3cf25..872ce0be3e 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java @@ -111,6 +111,10 @@ public class CompactionManager implements CompactionManagerMBean */ public Future submitBackground(final ColumnFamilyStore cfs) { + logger.debug("Scheduling a background task check for {}.{} with {}", + new Object[] {cfs.table.name, + cfs.columnFamily, + cfs.getCompactionStrategy().getClass().getSimpleName()}); Callable callable = new Callable() { public Integer call() throws IOException @@ -118,16 +122,24 @@ public class CompactionManager implements CompactionManagerMBean compactionLock.readLock().lock(); try { + logger.debug("Checking {}.{}", cfs.table.name, cfs.columnFamily); // log after we get the lock so we can see delays from that if any if (!cfs.isValid()) + { + logger.debug("Aborting compaction for dropped CF"); return 0; + } boolean taskExecuted = false; AbstractCompactionStrategy strategy = cfs.getCompactionStrategy(); List tasks = strategy.getBackgroundTasks(getDefaultGcBefore(cfs)); + logger.debug("{} minor compaction tasks available", tasks.size()); for (AbstractCompactionTask task : tasks) { if (!task.markSSTablesForCompaction()) + { + logger.debug("Skipping {}; sstables are busy", task); continue; + } taskExecuted = true; try diff --git a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java index 4e13640cd8..7e0684803a 100644 --- a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java +++ b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java @@ -448,13 +448,17 @@ public class LeveledManifest public synchronized int getEstimatedTasks() { long tasks = 0; + long[] estimated = new long[generations.length]; + for (int i = generations.length - 1; i >= 0; i--) { List sstables = generations[i]; - long n = Math.max(0L, SSTableReader.getTotalBytes(sstables) - maxBytesForLevel(i)) / (maxSSTableSizeInMB * 1024 * 1024); - logger.debug("Estimating " + n + " compaction tasks in level " + i); - tasks += n; + estimated[i] = Math.max(0L, SSTableReader.getTotalBytes(sstables) - maxBytesForLevel(i)) / (maxSSTableSizeInMB * 1024 * 1024); + tasks += estimated[i]; } + + logger.debug("Estimating {} compactions to do for {}.{}", + new Object[] {Arrays.asList(estimated), cfs.table.name, cfs.columnFamily}); return Ints.checkedCast(tasks); } } diff --git a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java index 6f6adbcf2d..15cc01d1aa 100644 --- a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java +++ b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java @@ -53,11 +53,12 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy if (cfs.isCompactionDisabled()) { logger.debug("Compaction is currently disabled."); - return Collections.emptyList(); + return Collections.emptyList(); } List tasks = new LinkedList(); List> buckets = getBuckets(createSSTableAndLengthPairs(cfs.getSSTables()), minSSTableSize); + logger.debug("Compaction buckets are {}", buckets); for (List bucket : buckets) {