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);
}
}