Author: chirino
Date: Sat May 18 04:57:40 2013
New Revision: 1484057

URL: http://svn.apache.org/r1484057
Log:
Reduce how often forced leveldb compactions occur.

Modified:
    
activemq/activemq-apollo/trunk/apollo-leveldb/src/main/scala/org/apache/activemq/apollo/broker/store/leveldb/LevelDBClient.scala

Modified: 
activemq/activemq-apollo/trunk/apollo-leveldb/src/main/scala/org/apache/activemq/apollo/broker/store/leveldb/LevelDBClient.scala
URL: 
http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-leveldb/src/main/scala/org/apache/activemq/apollo/broker/store/leveldb/LevelDBClient.scala?rev=1484057&r1=1484056&r2=1484057&view=diff
==============================================================================
--- 
activemq/activemq-apollo/trunk/apollo-leveldb/src/main/scala/org/apache/activemq/apollo/broker/store/leveldb/LevelDBClient.scala
 (original)
+++ 
activemq/activemq-apollo/trunk/apollo-leveldb/src/main/scala/org/apache/activemq/apollo/broker/store/leveldb/LevelDBClient.scala
 Sat May 18 04:57:40 2013
@@ -1196,7 +1196,7 @@ class LevelDBClient(store: LevelDBStore)
     // How much space is the dirty index using??
     var index_usage = 0L
     for( file <- dirty_index_file.recursive_list ) {
-      if(!file.isDirectory) {
+      if(!file.isDirectory && file.getName.endsWith(".sst") ) {
         index_usage += file.length()
       }
     }
@@ -1206,20 +1206,23 @@ class LevelDBClient(store: LevelDBStore)
       index_queue_entries += count.get()
     }
 
-    if ( index_queue_entries > 0 ) {
-      val ratio = (index_usage*1.0f/index_queue_entries)
-      // println("usage: index_usage:%d, index_queue_entries:%d, ratio: 
%f".format(index_usage, index_queue_entries, ratio))
-
-      // After running some load we empirically found that a healthy ratio is 
between 12 and 25 bytes per entry.
-      // lets compact if we go way over the healthy ratio.
-      if( ratio > auto_compaction_ratio ) {
+    // Don't force compactions until level 0 is full.
+    val SSL_FILE_SIZE = 1024*1024*4L
+    if( index_usage > SSL_FILE_SIZE*10 ) {
+      if ( index_queue_entries > 0 ) {
+        val ratio = (index_usage*1.0f/index_queue_entries)
+        // println("usage: index_usage:%d, index_queue_entries:%d, ratio: 
%f".format(index_usage, index_queue_entries, ratio))
+
+        // After running some load we empirically found that a healthy ratio 
is between 12 and 25 bytes per entry.
+        // lets compact if we go way over the healthy ratio.
+        if( ratio > auto_compaction_ratio ) {
+          index.compact_needed = true
+        }
+      } else {
+        // at most the index should have 1 full level file.
         index.compact_needed = true
       }
-    } else if( index_usage > 1024*1024*5 )  {
-      // at most the index should have 1 full level file.
-      index.compact_needed = true
     }
-
   }
 
   def gc: Unit = {


Reply via email to