Author: jbellis
Date: Thu Dec 10 21:53:25 2009
New Revision: 889435

URL: http://svn.apache.org/viewvc?rev=889435&view=rev
Log:
explicitly request System.gc after compaction or cleanup to keep unreferenced 
sstable clutter to a minimum

Modified:
    
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java

Modified: 
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=889435&r1=889434&r2=889435&view=diff
==============================================================================
--- 
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 (original)
+++ 
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 Thu Dec 10 21:53:25 2009
@@ -753,6 +753,7 @@
         {
             doCleanup(sstable);
         }
+        gcAfterRpcTimeout();
     }
 
     /**
@@ -937,6 +938,7 @@
         SSTableReader ssTable = 
writer.closeAndOpenReader(DatabaseDescriptor.getKeysCachedFraction(table_));
         ssTables_.add(ssTable);
         ssTables_.markCompacted(sstables);
+        gcAfterRpcTimeout();
         CompactionManager.instance().submit(ColumnFamilyStore.this);
 
         String format = "Compacted to %s.  %d/%d bytes for %d keys.  Time: 
%dms.";
@@ -946,6 +948,29 @@
     }
 
     /**
+     * perform a GC to clean out obsolete sstables, sleeping rpc timeout first 
so that most in-progress ops can complete
+     * (thus, no longer reference the sstables in question)
+     */
+    private void gcAfterRpcTimeout()
+    {
+        new Thread(new Runnable()
+        {
+            public void run()
+            {
+                try
+                {
+                    Thread.sleep(DatabaseDescriptor.getRpcTimeout());
+                }
+                catch (InterruptedException e)
+                {
+                    throw new AssertionError(e);
+                }
+                System.gc();
+            }
+        });
+    }
+
+    /**
      * Performs a readonly compaction of all sstables in order to validate
      * them on request, but without performing any writes.
      */


Reply via email to