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


Reply via email to