Repository: cassandra Updated Branches: refs/heads/trunk 0e5f2c807 -> b2d8e8821
Fix PER PARTITION LIMIT for single and multi partitions queries patch by Benjamin Lerer; reviewed by Alex Petrov for CASSANDRA-11603 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b2d8e882 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b2d8e882 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b2d8e882 Branch: refs/heads/trunk Commit: b2d8e88217d0532d54cba0cfae8ab6951df66f35 Parents: 0e5f2c8 Author: Benjamin Lerer <b.le...@gmail.com> Authored: Fri Apr 29 14:41:40 2016 +0200 Committer: Benjamin Lerer <b.le...@gmail.com> Committed: Fri Apr 29 14:43:36 2016 +0200 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../org/apache/cassandra/db/SinglePartitionReadCommand.java | 6 +++--- .../apache/cassandra/service/pager/MultiPartitionPager.java | 2 +- .../apache/cassandra/service/pager/SinglePartitionPager.java | 6 +++++- 4 files changed, 10 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b2d8e882/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 0315f1b..e11ebd8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.6 + * Fix PER PARTITION LIMIT for single and multi partitions queries (CASSANDRA-11603) * Add uncompressed chunk cache for RandomAccessReader (CASSANDRA-5863) * Clarify ClusteringPrefix hierarchy (CASSANDRA-11213) * Always perform collision check before joining ring (CASSANDRA-10134) http://git-wip-us.apache.org/repos/asf/cassandra/blob/b2d8e882/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java index c5dd7d6..a6d6047 100644 --- a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java +++ b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java @@ -279,11 +279,11 @@ public class SinglePartitionReadCommand extends ReadCommand * @param lastReturned the last row returned by the previous page. The newly created command * will only query row that comes after this (in query order). This can be {@code null} if this * is the first page. - * @param pageSize the size to use for the page to query. + * @param limits the limits to use for the page to query. * * @return the newly create command. */ - public SinglePartitionReadCommand forPaging(Clustering lastReturned, int pageSize) + public SinglePartitionReadCommand forPaging(Clustering lastReturned, DataLimits limits) { // We shouldn't have set digest yet when reaching that point assert !isDigestQuery(); @@ -292,7 +292,7 @@ public class SinglePartitionReadCommand extends ReadCommand nowInSec(), columnFilter(), rowFilter(), - limits().forPaging(pageSize), + limits, partitionKey(), lastReturned == null ? clusteringIndexFilter() : clusteringIndexFilter.forPaging(metadata().comparator, lastReturned, false)); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/b2d8e882/src/java/org/apache/cassandra/service/pager/MultiPartitionPager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/pager/MultiPartitionPager.java b/src/java/org/apache/cassandra/service/pager/MultiPartitionPager.java index 922df2e..57d6c62 100644 --- a/src/java/org/apache/cassandra/service/pager/MultiPartitionPager.java +++ b/src/java/org/apache/cassandra/service/pager/MultiPartitionPager.java @@ -88,7 +88,7 @@ public class MultiPartitionPager implements QueryPager return null; PagingState state = pagers[current].state(); - return new PagingState(pagers[current].key(), state == null ? null : state.rowMark, remaining, Integer.MAX_VALUE); + return new PagingState(pagers[current].key(), state == null ? null : state.rowMark, remaining, pagers[current].remainingInPartition()); } public boolean isExhausted() http://git-wip-us.apache.org/repos/asf/cassandra/blob/b2d8e882/src/java/org/apache/cassandra/service/pager/SinglePartitionPager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/pager/SinglePartitionPager.java b/src/java/org/apache/cassandra/service/pager/SinglePartitionPager.java index 6f17284..acb55bb 100644 --- a/src/java/org/apache/cassandra/service/pager/SinglePartitionPager.java +++ b/src/java/org/apache/cassandra/service/pager/SinglePartitionPager.java @@ -70,7 +70,11 @@ public class SinglePartitionPager extends AbstractQueryPager protected ReadCommand nextPageReadCommand(int pageSize) { - return command.forPaging(lastReturned == null ? null : lastReturned.clustering(command.metadata()), pageSize); + Clustering clustering = lastReturned == null ? null : lastReturned.clustering(command.metadata()); + DataLimits limits = (lastReturned == null || command.isForThrift()) ? limits().forPaging(pageSize) + : limits().forPaging(pageSize, key(), remainingInPartition()); + + return command.forPaging(clustering, limits); } protected void recordLast(DecoratedKey key, Row last)