From d03d80b6ed6114f4ff762a468c8b72d0ace05eca Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Wed, 20 May 2009 14:44:41 +0000 Subject: [PATCH] merge from 0.3 branch git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@776716 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 11 ++- lib/activation.jar | Bin 62983 -> 0 bytes .../cassandra/db/ColumnFamilyStore.java | 12 ++-- .../cassandra/db/MinorCompactionManager.java | 63 ++++++++---------- src/java/org/apache/cassandra/io/SSTable.java | 2 +- .../cassandra/db/OneCompactionTest.java | 7 +- 6 files changed, 48 insertions(+), 47 deletions(-) delete mode 100644 lib/activation.jar 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 e31e71c18865d26481e3e304f57e5d0adfee3f38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62983 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 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); } }