Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 4beb54da5 -> cba5ef609
Proper implementation of LegacyBoundComparator patch by slebresne; reviewed by blerer for CASSANDRA-10602 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/cba5ef60 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/cba5ef60 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/cba5ef60 Branch: refs/heads/cassandra-3.0 Commit: cba5ef609d6d25380afcb0dff06fe325101c727c Parents: 4beb54d Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Tue Oct 27 16:27:14 2015 +0100 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Mon Nov 2 15:28:45 2015 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/db/LegacyLayout.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/cba5ef60/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 6d5d49b..1724f01 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0 + * Fix implementation of LegacyLayout.LegacyBoundComparator (CASSANDRA-10602) * Don't use 'names query' read path for counters (CASSANDRA-10572) * Fix backward compatibility for counters (CASSANDRA-10470) * Remove memory_allocator paramter from cassandra.yaml (CASSANDRA-10581) http://git-wip-us.apache.org/repos/asf/cassandra/blob/cba5ef60/src/java/org/apache/cassandra/db/LegacyLayout.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/LegacyLayout.java b/src/java/org/apache/cassandra/db/LegacyLayout.java index 6e04559..3c64443 100644 --- a/src/java/org/apache/cassandra/db/LegacyLayout.java +++ b/src/java/org/apache/cassandra/db/LegacyLayout.java @@ -1698,10 +1698,26 @@ public abstract class LegacyLayout public int compare(LegacyBound a, LegacyBound b) { + // In the legacy sorting, BOTTOM comes before anything else + if (a == LegacyBound.BOTTOM) + return b == LegacyBound.BOTTOM ? 0 : -1; + if (b == LegacyBound.BOTTOM) + return 1; + + // Excluding BOTTOM, statics are always before anything else. + if (a.isStatic != b.isStatic) + return a.isStatic ? -1 : 1; + int result = this.clusteringComparator.compare(a.bound, b.bound); if (result != 0) return result; + // If both have equal "bound" but one is a collection tombstone and not the other, then the other comes before as it points to the beginning of the row. + if (a.collectionName == null) + return b.collectionName == null ? 0 : 1; + if (b.collectionName == null) + return -1; + return UTF8Type.instance.compare(a.collectionName.name.bytes, b.collectionName.name.bytes); } }