diff --git a/build.xml b/build.xml index 7dc08e0257..92bc937acb 100644 --- a/build.xml +++ b/build.xml @@ -178,7 +178,7 @@ + destfile="${build.dir}/${final.name}-bin.tar.gz"> @@ -191,6 +191,15 @@ + + + + + + + diff --git a/lib/activation.jar b/lib/activation.jar deleted file mode 100644 index e31e71c188..0000000000 Binary files a/lib/activation.jar and /dev/null differ diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 24e8016232..cb43e69b9e 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -56,7 +56,6 @@ public final class ColumnFamilyStore implements ColumnFamilyStoreMBean { private static Logger logger_ = Logger.getLogger(ColumnFamilyStore.class); - private static int COMPACTION_THRESHOLD = 4; // compact this many sstables at a time private static final int BUFSIZE = 128 * 1024 * 1024; private static final int COMPACTION_MEMORY_THRESHOLD = 1 << 30; @@ -770,8 +769,8 @@ public final class ColumnFamilyStore implements ColumnFamilyStoreMBean lock_.writeLock().unlock(); } - if ((ssTableSize >= COMPACTION_THRESHOLD && !isCompacting_.get()) - || (isCompacting_.get() && ssTableSize % COMPACTION_THRESHOLD == 0)) + if ((ssTableSize >= MinorCompactionManager.COMPACTION_THRESHOLD && !isCompacting_.get()) + || (isCompacting_.get() && ssTableSize % MinorCompactionManager.COMPACTION_THRESHOLD == 0)) { logger_.debug("Submitting for compaction ..."); MinorCompactionManager.instance().submit(ColumnFamilyStore.this); @@ -860,11 +859,6 @@ public final class ColumnFamilyStore implements ColumnFamilyStoreMBean return buckets.keySet(); } - public int doCompaction() throws IOException - { - return doCompaction(COMPACTION_THRESHOLD); - } - /* * Break the files into buckets and then compact. */ @@ -1294,6 +1288,7 @@ public final class ColumnFamilyStore implements ColumnFamilyStoreMBean */ private int doFileCompaction(List files, int minBufferSize) throws IOException { + logger_.info("Compacting [" + StringUtils.join(files, ",") + "]"); String compactionFileLocation = DatabaseDescriptor.getCompactionFileLocation(getExpectedCompactedFileSize(files)); // If the compaction file path is null that means we have no space left for this compaction. // try again w/o the largest one. @@ -1314,6 +1309,7 @@ public final class ColumnFamilyStore implements ColumnFamilyStoreMBean if (pq.isEmpty()) { + logger_.warn("Nothing to compact (all files empty or corrupt)"); // TODO clean out bad files, if any return 0; } diff --git a/src/java/org/apache/cassandra/db/MinorCompactionManager.java b/src/java/org/apache/cassandra/db/MinorCompactionManager.java index 2550737e4e..f3e0ea2fdf 100644 --- a/src/java/org/apache/cassandra/db/MinorCompactionManager.java +++ b/src/java/org/apache/cassandra/db/MinorCompactionManager.java @@ -46,7 +46,8 @@ class MinorCompactionManager implements IComponentShutdown private static MinorCompactionManager instance_; private static Lock lock_ = new ReentrantLock(); private static Logger logger_ = Logger.getLogger(MinorCompactionManager.class); - final static long intervalInMins_ = 5; + private static final long intervalInMins_ = 5; + static final int COMPACTION_THRESHOLD = 4; // compact this many sstables at a time public static MinorCompactionManager instance() { @@ -66,33 +67,6 @@ class MinorCompactionManager implements IComponentShutdown return instance_; } - class FileCompactor implements Callable - { - private ColumnFamilyStore columnFamilyStore_; - - FileCompactor(ColumnFamilyStore columnFamilyStore) - { - columnFamilyStore_ = columnFamilyStore; - } - - public Integer call() - { - logger_.debug("Started compaction ..." + columnFamilyStore_.columnFamily_); - try - { - return columnFamilyStore_.doCompaction(); - } - catch (IOException e) - { - throw new RuntimeException(e); - } - finally - { - logger_.debug("Finished compaction ..." + columnFamilyStore_.columnFamily_); - } - } - } - class FileCompactor2 implements Callable { private ColumnFamilyStore columnFamilyStore_; @@ -138,9 +112,9 @@ class MinorCompactionManager implements IComponentShutdown public void run() { - logger_.debug("Started Major compaction ..."+columnFamilyStore_.columnFamily_); + logger_.debug("Started Major compaction for " + columnFamilyStore_.columnFamily_); columnFamilyStore_.doMajorCompaction(skip_); - logger_.debug("Finished Major compaction ..."+columnFamilyStore_.columnFamily_); + logger_.debug("Finished Major compaction for " + columnFamilyStore_.columnFamily_); } } @@ -183,22 +157,41 @@ class MinorCompactionManager implements IComponentShutdown public void submitPeriodicCompaction(final ColumnFamilyStore columnFamilyStore) { - Runnable runnable = new Runnable() // having to wrap Callable in Runnable is retarded but that's what the API insists on. + Runnable runnable = new Runnable() { public void run() { - new FileCompactor(columnFamilyStore).call(); + try + { + columnFamilyStore.doCompaction(COMPACTION_THRESHOLD); + } + catch (IOException e) + { + throw new RuntimeException(e); + } } }; compactor_.scheduleWithFixedDelay(runnable, MinorCompactionManager.intervalInMins_, MinorCompactionManager.intervalInMins_, TimeUnit.MINUTES); } - public Future submit(ColumnFamilyStore columnFamilyStore) + public Future submit(final ColumnFamilyStore columnFamilyStore) { - return compactor_.submit(new FileCompactor(columnFamilyStore)); + return submit(columnFamilyStore, COMPACTION_THRESHOLD); } - + + Future submit(final ColumnFamilyStore columnFamilyStore, final int threshold) + { + Callable callable = new Callable() + { + public Integer call() throws IOException + { + return columnFamilyStore.doCompaction(threshold); + } + }; + return compactor_.submit(callable); + } + public void submitCleanup(ColumnFamilyStore columnFamilyStore) { compactor_.submit(new CleanupCompactor(columnFamilyStore)); diff --git a/src/java/org/apache/cassandra/io/SSTable.java b/src/java/org/apache/cassandra/io/SSTable.java index 67d214a381..947db77f21 100644 --- a/src/java/org/apache/cassandra/io/SSTable.java +++ b/src/java/org/apache/cassandra/io/SSTable.java @@ -220,7 +220,7 @@ public class SSTable } File file = new File(dataFile); - assert file.exists(); + assert file.exists() : "attempted to delete non-existing file " + dataFile; /* delete the data file */ if (!file.delete()) { diff --git a/test/unit/org/apache/cassandra/db/OneCompactionTest.java b/test/unit/org/apache/cassandra/db/OneCompactionTest.java index 300672ebfc..16f2c3b1b9 100644 --- a/test/unit/org/apache/cassandra/db/OneCompactionTest.java +++ b/test/unit/org/apache/cassandra/db/OneCompactionTest.java @@ -20,6 +20,7 @@ package org.apache.cassandra.db; import java.io.IOException; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import java.util.Set; import java.util.HashSet; @@ -44,7 +45,9 @@ public class OneCompactionTest store.forceBlockingFlush(); assertEquals(table.getKeyRange("", "", 10000).size(), inserted.size()); } - store.doCompaction(2); + Future ft = MinorCompactionManager.instance().submit(store, 2); + ft.get(); + assertEquals(1, store.getSSTableFilenames().size()); assertEquals(table.getKeyRange("", "", 10000).size(), inserted.size()); } @@ -57,6 +60,6 @@ public class OneCompactionTest @Test public void testCompaction2() throws IOException, ExecutionException, InterruptedException { - testCompaction("Standard2", 500); + testCompaction("Standard2", 5); } }