From 70e8b39b021b0abae69009c4a034657e2518e09e Mon Sep 17 00:00:00 2001 From: Benjamin Lerer Date: Wed, 11 Jan 2017 21:05:37 +0100 Subject: [PATCH] Fix paging for DISTINCT queries on partition keys and static columns patch by Benjamin Lerer; reviewed by Tyler Hobbs for CASSANDRA-13017 --- CHANGES.txt | 1 + .../apache/cassandra/service/pager/RangeSliceQueryPager.java | 3 ++- test/unit/org/apache/cassandra/service/QueryPagerTest.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 23fd12a1a9..414d6ede6f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.17 + * Fix paging for DISTINCT queries on partition keys and static columns (CASSANDRA-13017) * Fix race causing infinite loop if Thrift server is stopped before it starts listening (CASSANDRA-12856) * cqlsh copy-from: sort user type fields in csv (CASSANDRA-12959) * Fix missed signal when commit log segments are recycled (CASSANDRA-13037) diff --git a/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java b/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java index caa146af69..3ac777e588 100644 --- a/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java +++ b/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java @@ -74,7 +74,8 @@ public class RangeSliceQueryPager extends AbstractQueryPager { SliceQueryFilter sf = (SliceQueryFilter)columnFilter; AbstractBounds keyRange = lastReturnedKey == null ? command.keyRange : makeIncludingKeyBounds(lastReturnedKey); - Composite start = lastReturnedName == null ? sf.start() : lastReturnedName; + // For DISTINCT queries we can and must ignore the lastReturnedName (see CASSANDRA-13017) + Composite start = lastReturnedName == null || isDistinct() ? sf.start() : lastReturnedName; PagedRangeCommand pageCmd = new PagedRangeCommand(command.keyspace, command.columnFamily, command.timestamp, diff --git a/test/unit/org/apache/cassandra/service/QueryPagerTest.java b/test/unit/org/apache/cassandra/service/QueryPagerTest.java index c78412f00d..1939c4af40 100644 --- a/test/unit/org/apache/cassandra/service/QueryPagerTest.java +++ b/test/unit/org/apache/cassandra/service/QueryPagerTest.java @@ -146,7 +146,7 @@ public class QueryPagerTest extends SchemaLoader private static RangeSliceCommand rangeSliceQuery(AbstractBounds range, int count, String start, String end) { SliceQueryFilter filter = new SliceQueryFilter(CellNames.simpleDense(bytes(start)), CellNames.simpleDense(bytes(end)), false, Integer.MAX_VALUE); - return new RangeSliceCommand(KS, CF, System.currentTimeMillis(), filter, range, count); + return new RangeSliceCommand(KS, CF, System.currentTimeMillis(), filter, range, null, count, true, false); } private static void assertRow(Row r, String key, String... names)