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)