Updated Branches:
  refs/heads/trunk bcbcff3e6 -> c7af3040c

simplify SizeTieredCompactionStrategy, and reduce allocations
patch by dbrosius reviewed by jbellis for cassandra-6138


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c7af3040
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c7af3040
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c7af3040

Branch: refs/heads/trunk
Commit: c7af3040c6ecd7a7fa7288ac56ba0c7fe0602e40
Parents: bcbcff3
Author: Dave Brosius <[email protected]>
Authored: Wed Oct 2 22:59:56 2013 -0400
Committer: Dave Brosius <[email protected]>
Committed: Wed Oct 2 22:59:56 2013 -0400

----------------------------------------------------------------------
 .../SizeTieredCompactionStrategy.java           | 50 +++++++++++---------
 1 file changed, 27 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c7af3040/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java 
b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java
index cee5f97..61f5668 100644
--- 
a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java
+++ 
b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java
@@ -34,6 +34,30 @@ import org.apache.cassandra.utils.Pair;
 public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy
 {
     private static final Logger logger = 
LoggerFactory.getLogger(SizeTieredCompactionStrategy.class);
+    
+    private static Comparator<SSTableReader> generationComparator = new 
Comparator<SSTableReader>()
+    {
+        public int compare(SSTableReader o1, SSTableReader o2)
+        {
+            return o1.descriptor.generation - o2.descriptor.generation;
+        }
+    };
+    
+    private static Comparator<List<SSTableReader>> avgBucketSizeComparator = 
new Comparator<List<SSTableReader>>()
+    {
+        public int compare(List<SSTableReader> o1, List<SSTableReader> o2)
+        {
+            return Longs.compare(avgSize(o1), avgSize(o2));
+        }
+
+        private long avgSize(List<SSTableReader> sstables)
+        {
+            long n = 0;
+            for (SSTableReader sstable : sstables)
+                n += sstable.bytesOnDisk();
+            return n / sstables.size();
+        }
+    };
 
     protected SizeTieredCompactionStrategyOptions options;
     protected volatile int estimatedRemainingTasks;
@@ -86,35 +110,15 @@ public class SizeTieredCompactionStrategy extends 
AbstractCompactionStrategy
             if (bucket.size() < minThreshold)
                 continue;
 
-            Collections.sort(bucket, new Comparator<SSTableReader>()
-            {
-                public int compare(SSTableReader o1, SSTableReader o2)
-                {
-                    return o1.descriptor.generation - o2.descriptor.generation;
-                }
-            });
+            Collections.sort(bucket, generationComparator);
             List<SSTableReader> prunedBucket = bucket.subList(0, 
Math.min(bucket.size(), maxThreshold));
             prunedBuckets.add(prunedBucket);
         }
         if (prunedBuckets.isEmpty())
             return Collections.emptyList();
-
+        
         // prefer compacting buckets with smallest average size; that will 
yield the fastest improvement for read performance
-        return Collections.min(prunedBuckets, new 
Comparator<List<SSTableReader>>()
-        {
-            public int compare(List<SSTableReader> o1, List<SSTableReader> o2)
-            {
-                return Longs.compare(avgSize(o1), avgSize(o2));
-            }
-
-            private long avgSize(List<SSTableReader> sstables)
-            {
-                long n = 0;
-                for (SSTableReader sstable : sstables)
-                    n += sstable.bytesOnDisk();
-                return n / sstables.size();
-            }
-        });
+        return Collections.min(prunedBuckets, avgBucketSizeComparator);
     }
 
     public synchronized AbstractCompactionTask getNextBackgroundTask(int 
gcBefore)

Reply via email to