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)

Reply via email to