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