Author: jbellis Date: Mon Aug 29 15:15:32 2011 New Revision: 1162849 URL: http://svn.apache.org/viewvc?rev=1162849&view=rev Log: reduce window where dropped CF sstables may not be deleted patch by jbellis; reviewed by slebresne for CASSANDRA-2942
Modified: cassandra/trunk/CHANGES.txt cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java cassandra/trunk/src/java/org/apache/cassandra/io/DeletionService.java cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Modified: cassandra/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1162849&r1=1162848&r2=1162849&view=diff ============================================================================== --- cassandra/trunk/CHANGES.txt (original) +++ cassandra/trunk/CHANGES.txt Mon Aug 29 15:15:32 2011 @@ -46,6 +46,8 @@ * Cli to use hashes rather than array of hashes for strategy options (CASSANDRA-3081) * LeveledCompactionStrategy (CASSANDRA-1608) * Improvements of the CLI `describe` command (CASSANDRA-2630) + * reduce window where dropped CF sstables may not be deleted (CASSANDRA-2942) + 0.8.5 * fix NPE when encryption_options is unspecified (CASSANDRA-3007) Modified: cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java?rev=1162849&r1=1162848&r2=1162849&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java Mon Aug 29 15:15:32 2011 @@ -42,7 +42,6 @@ import org.apache.cassandra.concurrent.S import org.apache.cassandra.concurrent.StageManager; import org.apache.cassandra.config.Config; import org.apache.cassandra.config.DatabaseDescriptor; -import org.apache.cassandra.io.DeletionService; import org.apache.cassandra.io.util.FastByteArrayInputStream; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; @@ -486,7 +485,7 @@ public class CommitLog implements Commit { logger.info("Discarding obsolete commit log:" + segment); segment.close(); - DeletionService.executeDelete(segment.getPath()); + FileUtils.deleteAsync(segment.getPath()); // usually this will be the first (remaining) segment, but not always, if segment A contains // writes to a CF that is unflushed but is followed by segment B whose CFs are all flushed. iter.remove(); Modified: cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java?rev=1162849&r1=1162848&r2=1162849&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java Mon Aug 29 15:15:32 2011 @@ -20,13 +20,15 @@ package org.apache.cassandra.io.util; import java.io.*; import java.text.DecimalFormat; -import java.util.Collection; import java.util.Comparator; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.cassandra.service.StorageService; +import org.apache.cassandra.utils.WrappedRunnable; + public class FileUtils { @@ -167,6 +169,18 @@ public class FileUtils } } + public static void deleteAsync(final String file) + { + Runnable runnable = new WrappedRunnable() + { + protected void runMayThrow() throws IOException + { + deleteWithConfirm(new File(file)); + } + }; + StorageService.tasks.execute(runnable); + } + public static String stringifyFileSize(double value) { double d; Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=1162849&r1=1162848&r2=1162849&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Mon Aug 29 15:15:32 2011 @@ -46,7 +46,6 @@ import org.apache.cassandra.db.*; import org.apache.cassandra.db.commitlog.CommitLog; import org.apache.cassandra.dht.*; import org.apache.cassandra.gms.*; -import org.apache.cassandra.io.DeletionService; import org.apache.cassandra.io.sstable.SSTableDeletingTask; import org.apache.cassandra.io.sstable.SSTableLoader; import org.apache.cassandra.io.util.FileUtils; @@ -427,6 +426,11 @@ public class StorageService implements I } } FBUtilities.waitOnFutures(flushes); + + // wait for miscellaneous tasks like sstable and commitlog segment deletion + tasks.shutdown(); + if (!tasks.awaitTermination(1, TimeUnit.MINUTES)) + logger_.warn("Miscellaneous task executor still busy after one minute; proceeding with shutdown"); } }); Runtime.getRuntime().addShutdownHook(drainOnShutdown); @@ -2270,8 +2274,10 @@ public class StorageService implements I CommitLog.instance.shutdownBlocking(); - // want to make sure that any segments deleted as a result of flushing are gone. - DeletionService.waitFor(); + // wait for miscellaneous tasks like sstable and commitlog segment deletion + tasks.shutdown(); + if (!tasks.awaitTermination(1, TimeUnit.MINUTES)) + logger_.warn("Miscellaneous task executor still busy after one minute; proceeding with shutdown"); setMode("Node is drained", true); }