You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by db...@apache.org on 2013/10/03 05:00:55 UTC

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

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 <db...@apache.org>
Authored: Wed Oct 2 22:59:56 2013 -0400
Committer: Dave Brosius <db...@apache.org>
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)