cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ble...@apache.org
Subject [2/4] cassandra git commit: Fix paging for 2.x to 3.x upgrades
Date Mon, 12 Sep 2016 08:51:15 GMT
Fix paging for 2.x to 3.x upgrades

patch by Benjamin Lerer; reviewed by Sylvain Lebresne for CASSANDRA-11195


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c11c7d73
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c11c7d73
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c11c7d73

Branch: refs/heads/trunk
Commit: c11c7d73d086f89521805ce7cc1907d5788ab969
Parents: 6facdf0
Author: Benjamin Lerer <b.lerer@gmail.com>
Authored: Mon Sep 12 10:37:27 2016 +0200
Committer: Benjamin Lerer <b.lerer@gmail.com>
Committed: Mon Sep 12 10:37:27 2016 +0200

----------------------------------------------------------------------
 CHANGES.txt                                               |  1 +
 .../apache/cassandra/cql3/statements/SelectStatement.java |  5 +----
 src/java/org/apache/cassandra/db/ReadCommand.java         |  8 +++-----
 src/java/org/apache/cassandra/db/ReadResponse.java        | 10 +++-------
 4 files changed, 8 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c11c7d73/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5a73dd8..e849d28 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -34,6 +34,7 @@
  * Add repaired percentage metric (CASSANDRA-11503)
  * Add Change-Data-Capture (CASSANDRA-8844)
 Merged from 3.0:
+ * Fix paging for 2.x to 3.x upgrades (CASSANDRA-11195)
  * Fix clean interval not sent to commit log for empty memtable flush (CASSANDRA-12436)
  * Fix potential resource leak in RMIServerSocketFactoryImpl (CASSANDRA-12331)
  * Make sure compaction stats are updated when compaction is interrupted (CASSANDRA-12100)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c11c7d73/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index f2b484e..a8b97d1 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -21,9 +21,7 @@ import java.nio.ByteBuffer;
 import java.util.*;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,7 +62,6 @@ import static org.apache.cassandra.cql3.statements.RequestValidations.checkFalse
 import static org.apache.cassandra.cql3.statements.RequestValidations.checkNotNull;
 import static org.apache.cassandra.cql3.statements.RequestValidations.checkNull;
 import static org.apache.cassandra.cql3.statements.RequestValidations.checkTrue;
-import static org.apache.cassandra.cql3.statements.RequestValidations.invalidRequest;
 import static org.apache.cassandra.utils.ByteBufferUtil.UNSET_BYTE_BUFFER;
 
 /**

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c11c7d73/src/java/org/apache/cassandra/db/ReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ReadCommand.java b/src/java/org/apache/cassandra/db/ReadCommand.java
index 68c9e3b..9542703 100644
--- a/src/java/org/apache/cassandra/db/ReadCommand.java
+++ b/src/java/org/apache/cassandra/db/ReadCommand.java
@@ -1075,7 +1075,7 @@ public abstract class ReadCommand extends MonitorableImpl implements
ReadQuery
             // slice filter's stop.
             DataRange.Paging pagingRange = (DataRange.Paging) rangeCommand.dataRange();
             Clustering lastReturned = pagingRange.getLastReturned();
-            ClusteringBound newStart = ClusteringBound.exclusiveStartOf(lastReturned);
+            ClusteringBound newStart = ClusteringBound.inclusiveStartOf(lastReturned);
             Slice lastSlice = filter.requestedSlices().get(filter.requestedSlices().size()
- 1);
             ByteBufferUtil.writeWithShortLength(LegacyLayout.encodeBound(metadata, newStart,
true), out);
             ByteBufferUtil.writeWithShortLength(LegacyLayout.encodeClustering(metadata, lastSlice.end().clustering()),
out);
@@ -1084,10 +1084,8 @@ public abstract class ReadCommand extends MonitorableImpl implements
ReadQuery
 
             // command-level limit
             // Pre-3.0 we would always request one more row than we actually needed and the
command-level "start" would
-            // be the last-returned cell name, so the response would always include it. 
When dealing with compound comparators,
-            // we can pass an exclusive start and use the normal limit.  However, when dealing
with non-compound comparators,
-            // pre-3.0 nodes cannot perform exclusive slices, so we need to request one extra
row.
-            int maxResults = rangeCommand.limits().count() + (metadata.isCompound() ? 0 :
1);
+            // be the last-returned cell name, so the response would always include it.
+            int maxResults = rangeCommand.limits().count() + 1;
             out.writeInt(maxResults);
 
             // countCQL3Rows

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c11c7d73/src/java/org/apache/cassandra/db/ReadResponse.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ReadResponse.java b/src/java/org/apache/cassandra/db/ReadResponse.java
index 05ebd00..cca21f8 100644
--- a/src/java/org/apache/cassandra/db/ReadResponse.java
+++ b/src/java/org/apache/cassandra/db/ReadResponse.java
@@ -280,13 +280,9 @@ public abstract class ReadResponse
 
                     ClusteringIndexFilter filter = command.clusteringIndexFilter(partition.partitionKey());
 
-                    // Pre-3.0, we didn't have a way to express exclusivity for non-composite
comparators, so all slices were
-                    // inclusive on both ends. If we have exclusive slice ends, we need to
filter the results here.
-                    UnfilteredRowIterator iterator;
-                    if (!command.metadata().isCompound())
-                        iterator = partition.unfilteredIterator(command.columnFilter(), filter.getSlices(command.metadata()),
filter.isReversed());
-                    else
-                        iterator = partition.unfilteredIterator(command.columnFilter(), Slices.ALL,
filter.isReversed());
+                    // Pre-3.0, we would always request one more row than we actually needed
and the command-level "start" would
+                    // be the last-returned cell name, so the response would always include
it.
+                    UnfilteredRowIterator iterator = partition.unfilteredIterator(command.columnFilter(),
filter.getSlices(command.metadata()), filter.isReversed());
 
                     // Wrap results with a ThriftResultMerger only if they're intended for
the thrift command.
                     if (command.isForThrift())


Mime
View raw message