diff --git a/src/java/org/apache/cassandra/db/CommitLog.java b/src/java/org/apache/cassandra/db/CommitLog.java index 7e6b32fc84..8a424e946e 100644 --- a/src/java/org/apache/cassandra/db/CommitLog.java +++ b/src/java/org/apache/cassandra/db/CommitLog.java @@ -21,7 +21,7 @@ package org.apache.cassandra.db; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.io.util.BufferedRandomAccessFile; import org.apache.cassandra.io.util.DataOutputBuffer; -import org.apache.cassandra.io.util.FileUtils; +import org.apache.cassandra.io.DeletionService; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.concurrent.StageManager; @@ -570,7 +570,7 @@ public class CommitLog if (header.isSafeToDelete()) { logger_.info("Deleting obsolete commit log:" + oldFile); - FileUtils.deleteAsync(oldFile); + DeletionService.deleteAsync(oldFile); clHeaders_.remove(oldFile); } else diff --git a/src/java/org/apache/cassandra/io/DeletionService.java b/src/java/org/apache/cassandra/io/DeletionService.java new file mode 100644 index 0000000000..830f2a0144 --- /dev/null +++ b/src/java/org/apache/cassandra/io/DeletionService.java @@ -0,0 +1,32 @@ +package org.apache.cassandra.io; + +import java.io.File; +import java.io.IOException; +import java.util.concurrent.ExecutorService; + +import org.apache.cassandra.concurrent.JMXEnabledThreadPoolExecutor; +import org.apache.cassandra.io.util.FileUtils; + +public class DeletionService +{ + public static final ExecutorService executor = new JMXEnabledThreadPoolExecutor("FILEUTILS-DELETE-POOL"); + + public static void deleteAsync(final String file) throws IOException + { + Runnable deleter = new Runnable() + { + public void run() + { + try + { + FileUtils.deleteWithConfirm(new File(file)); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + }; + executor.submit(deleter); + } +} diff --git a/src/java/org/apache/cassandra/io/util/FileUtils.java b/src/java/org/apache/cassandra/io/util/FileUtils.java index 68359f78e6..36fef52b39 100644 --- a/src/java/org/apache/cassandra/io/util/FileUtils.java +++ b/src/java/org/apache/cassandra/io/util/FileUtils.java @@ -37,43 +37,17 @@ public class FileUtils private static final double gb_ = 1024*1024*1024d; private static final double tb_ = 1024*1024*1024*1024d; - private static ExecutorService deleter_ = new JMXEnabledThreadPoolExecutor("FILEUTILS-DELETE-POOL"); - - public static void shutdown() - { - deleter_.shutdownNow(); - } - public static void deleteWithConfirm(File file) throws IOException { assert file.exists() : "attempted to delete non-existing file " + file.getName(); + if (logger_.isDebugEnabled()) + logger_.debug("Deleting " + file.getName()); if (!file.delete()) { throw new IOException("Failed to delete " + file.getAbsolutePath()); } } - public static class Deleter implements Runnable - { - File file_ = null; - - public Deleter(File f) - { - file_ = f; - } - - public void run() - { - if(file_ == null) - return; - logger_.debug("Deleting " + file_.getName()); - if (!file_.delete()) - { - logger_.error("Unable to delete file " + file_.getAbsolutePath()); - } - } - } - public static class FileComparator implements Comparator { public int compare(File f, File f2) @@ -113,13 +87,6 @@ public class FileUtils return f.delete(); } - public static void deleteAsync(String file) throws IOException - { - File f = new File(file); - Runnable deleter = new Deleter(f); - deleter_.submit(deleter); - } - public static boolean delete(List files) throws IOException { boolean bVal = true; diff --git a/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java b/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java index 5859f44e96..dede3b7bd8 100644 --- a/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java +++ b/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java @@ -26,7 +26,7 @@ import java.util.TreeMap; import org.junit.Test; -import DataOutputBuffer; +import org.apache.cassandra.io.util.DataOutputBuffer; import org.apache.cassandra.db.filter.QueryPath; import static org.apache.cassandra.Util.column; diff --git a/test/unit/org/apache/cassandra/db/ReadMessageTest.java b/test/unit/org/apache/cassandra/db/ReadMessageTest.java index 0021091857..22cab5e747 100644 --- a/test/unit/org/apache/cassandra/db/ReadMessageTest.java +++ b/test/unit/org/apache/cassandra/db/ReadMessageTest.java @@ -30,6 +30,7 @@ import org.apache.commons.lang.ArrayUtils; import org.junit.Test; import org.apache.cassandra.db.filter.QueryPath; +import org.apache.cassandra.io.util.DataOutputBuffer; public class ReadMessageTest { diff --git a/test/unit/org/apache/cassandra/tools/SSTableExportTest.java b/test/unit/org/apache/cassandra/tools/SSTableExportTest.java index bc5aa9e36c..62bfb64b69 100644 --- a/test/unit/org/apache/cassandra/tools/SSTableExportTest.java +++ b/test/unit/org/apache/cassandra/tools/SSTableExportTest.java @@ -31,6 +31,7 @@ import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.io.SSTableAccessor; import org.apache.cassandra.io.SSTableReader; import org.apache.cassandra.io.SSTableWriter; +import org.apache.cassandra.io.util.DataOutputBuffer; import static org.apache.cassandra.Util.createTemporarySSTable; import static org.apache.cassandra.utils.FBUtilities.hexToBytes; import static org.junit.Assert.assertTrue;