add generation back to bucketing (filtering) sort
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e5066514 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e5066514 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e5066514 Branch: refs/heads/trunk Commit: e5066514f4405ef0e1ba839339dc3eceece479f7 Parents: 786672e Author: Jonathan Ellis <jbel...@apache.org> Authored: Tue Oct 29 15:36:10 2013 -0500 Committer: Jonathan Ellis <jbel...@apache.org> Committed: Tue Oct 29 15:36:10 2013 -0500 ---------------------------------------------------------------------- .../db/compaction/SizeTieredCompactionStrategy.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/e5066514/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 5115860..09d4e8e 100644 --- a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java +++ b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java @@ -90,7 +90,7 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy @VisibleForTesting static List<SSTableReader> filterColdSSTables(List<SSTableReader> sstables, double coldReadsToOmit) { - // sort the sstables by hotness (coldest-first), breaking ties with size on disk (mainly for system tables and cold tables) + // sort the sstables by hotness (coldest-first) Collections.sort(sstables, new Comparator<SSTableReader>() { public int compare(SSTableReader o1, SSTableReader o2) @@ -99,7 +99,14 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy if (comparison != 0) return comparison; - return Long.compare(o1.bytesOnDisk(), o2.bytesOnDisk()); + // break ties with size on disk (mainly for system tables and cold tables) + comparison = Long.compare(o1.bytesOnDisk(), o2.bytesOnDisk()); + if (comparison != 0) + return comparison; + + // if there's still a tie, use generation, which is guaranteed to be unique. this ensures that + // our filtering is deterministic, which can be useful when debugging. + return o1.descriptor.generation - o2.descriptor.generation; } });