You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by bl...@apache.org on 2016/10/25 15:16:34 UTC
[1/2] cassandra git commit: Use non-token restrictions for bounds
when token restrictions are overridden
Repository: cassandra
Updated Branches:
refs/heads/trunk 4c728d2e4 -> 250573302
Use non-token restrictions for bounds when token restrictions are overridden
patch by Alex Petrov; reviewed by Benjamin Lerer for CASSANDRA-12149
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b98a4060
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b98a4060
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b98a4060
Branch: refs/heads/trunk
Commit: b98a40605a4eeaf9347401b8f9ed9f0fe297c745
Parents: 8644aa9
Author: Alex Petrov <ol...@gmail.com>
Authored: Tue Oct 25 17:12:06 2016 +0200
Committer: Benjamin Lerer <b....@gmail.com>
Committed: Tue Oct 25 17:12:06 2016 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cql3/restrictions/TokenFilter.java | 21 ++++----
.../SelectOrderedPartitionerTest.java | 50 ++++++++++++++++++++
3 files changed, 63 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b98a4060/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e6477d7..dea2003 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.10
+ * Use non-token restrictions for bounds when token restrictions are overridden (CASSANDRA-12419)
* Fix CQLSH auto completion for PER PARTITION LIMIT (CASSANDRA-12803)
* Use different build directories for Eclipse and Ant (CASSANDRA-12466)
* Avoid potential AttributeError in cqlsh due to no table metadata (CASSANDRA-12815)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b98a4060/src/java/org/apache/cassandra/cql3/restrictions/TokenFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/TokenFilter.java b/src/java/org/apache/cassandra/cql3/restrictions/TokenFilter.java
index 2611d19..400706b 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/TokenFilter.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/TokenFilter.java
@@ -41,18 +41,21 @@ import static org.apache.cassandra.cql3.statements.Bound.START;
/**
* <code>Restriction</code> decorator used to merge non-token restriction and token restriction on partition keys.
+ *
+ * <p>If all partition key columns have non-token restrictions and do not need filtering, they take precedence
+ * when calculating bounds, incusiveness etc (see CASSANDRA-12149).</p>
*/
final class TokenFilter implements PartitionKeyRestrictions
{
/**
* The decorated restriction
*/
- private PartitionKeyRestrictions restrictions;
+ private final PartitionKeyRestrictions restrictions;
/**
* The restriction on the token
*/
- private TokenRestriction tokenRestriction;
+ private final TokenRestriction tokenRestriction;
/**
* Partitioner to manage tokens, extracted from tokenRestriction metadata.
@@ -81,9 +84,9 @@ final class TokenFilter implements PartitionKeyRestrictions
@Override
public boolean isOnToken()
{
- // if all partition key columns have non-token restrictions, we can simply use the token range to filter
- // those restrictions and then ignore the token range
- return restrictions.size() < tokenRestriction.size();
+ // if all partition key columns have non-token restrictions and do not need filtering,
+ // we can simply use the token range to filter those restrictions and then ignore the token range
+ return needFiltering(tokenRestriction.metadata) || restrictions.size() < tokenRestriction.size();
}
public TokenFilter(PartitionKeyRestrictions restrictions, TokenRestriction tokenRestriction)
@@ -111,19 +114,19 @@ final class TokenFilter implements PartitionKeyRestrictions
@Override
public boolean isInclusive(Bound bound)
{
- return tokenRestriction.isInclusive(bound);
+ return isOnToken() ? tokenRestriction.isInclusive(bound) : restrictions.isInclusive(bound);
}
@Override
- public boolean hasBound(Bound b)
+ public boolean hasBound(Bound bound)
{
- return tokenRestriction.hasBound(b);
+ return isOnToken() ? tokenRestriction.hasBound(bound) : restrictions.hasBound(bound);
}
@Override
public List<ByteBuffer> bounds(Bound bound, QueryOptions options) throws InvalidRequestException
{
- return tokenRestriction.bounds(bound, options);
+ return isOnToken() ? tokenRestriction.bounds(bound, options) : restrictions.bounds(bound, options);
}
/**
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b98a4060/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java
index 0e3a342..3957305 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java
@@ -46,9 +46,50 @@ public class SelectOrderedPartitionerTest extends CQLTester
}
@Test
+ public void testTokenAndIndex() throws Throwable
+ {
+ createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
+ createIndex("CREATE INDEX ON %s(c)");
+
+ for (int i = 0; i < 10; i++)
+ {
+ execute("INSERT INTO %s (a,b,c,d) VALUES (?, ?, ?, ?)", i, i, i, i);
+ execute("INSERT INTO %s (a,b,c,d) VALUES (?, ?, ?, ?)", i, i + 10, i + 10, i + 10);
+ }
+
+ beforeAndAfterFlush(() -> {
+ assertRows(execute("SELECT * FROM %s WHERE token(a) > token(8) AND a = 9 AND c = 9 ALLOW FILTERING"),
+ row(9, 9, 9, 9));
+
+ assertRows(execute("SELECT * FROM %s WHERE token(a) > token(8) AND a > 8 AND c = 9 ALLOW FILTERING"),
+ row(9, 9, 9, 9));
+ });
+ }
+
+
+ @Test
+ public void testFilteringOnAllPartitionKeysWithTokenRestriction() throws Throwable
+ {
+ createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY ((a, b), c))");
+
+ for (int i = 0; i < 10; i++)
+ {
+ execute("INSERT INTO %s (a,b,c,d) VALUES (?, ?, ?, ?)", i, i, i, i);
+ execute("INSERT INTO %s (a,b,c,d) VALUES (?, ?, ?, ?)", i, i + 10, i + 10, i + 10);
+ }
+
+ assertEmpty(execute("SELECT * FROM %s WHERE token(a, b) > token(10, 10)"));
+ assertEmpty(execute("SELECT * FROM %s WHERE token(a, b) > token(10, 10) AND a < 8 AND b < 8 ALLOW FILTERING"));
+ assertRows(execute("SELECT * FROM %s WHERE token(a, b) > token(5, 5) AND a < 8 AND b < 8 ALLOW FILTERING"),
+ row(6, 6, 6, 6),
+ row(7, 7, 7, 7));
+ }
+
+ @Test
public void testFilteringOnPartitionKeyWithToken() throws Throwable
{
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY ((a, b), c))");
+ createIndex("CREATE INDEX ON %s(d)");
for (int i = 0; i < 10; i++)
{
@@ -65,6 +106,15 @@ public class SelectOrderedPartitionerTest extends CQLTester
row(9, 9, 9, 9),
row(9, 19, 19, 19));
+ assertRows(execute("SELECT * FROM %s WHERE token(a, b) > token(8, 10) AND a = 9 AND d = 9 ALLOW FILTERING"),
+ row(9, 9, 9, 9));
+
+ assertRows(execute("SELECT * FROM %s WHERE token(a, b) > token(8, 10) AND a > 8 AND b > 8 AND d = 9 ALLOW FILTERING"),
+ row(9, 9, 9, 9));
+
+ assertRows(execute("SELECT * FROM %s WHERE a = 9 AND b = 9 AND token(a, b) > token(8, 10) AND d = 9 ALLOW FILTERING"),
+ row(9, 9, 9, 9));
+
assertRows(execute("SELECT * FROM %s WHERE token(a, b) > token(8, 10) AND a = 9 AND c = 19 ALLOW FILTERING"),
row(9, 19, 19, 19));
[2/2] cassandra git commit: Merge branch cassandra-3.X into trunk
Posted by bl...@apache.org.
Merge branch cassandra-3.X into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/25057330
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/25057330
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/25057330
Branch: refs/heads/trunk
Commit: 2505733020759528d1592fd5ee3e3390b7227354
Parents: 4c728d2 b98a406
Author: Benjamin Lerer <b....@gmail.com>
Authored: Tue Oct 25 17:15:49 2016 +0200
Committer: Benjamin Lerer <b....@gmail.com>
Committed: Tue Oct 25 17:16:00 2016 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cql3/restrictions/TokenFilter.java | 21 ++++----
.../SelectOrderedPartitionerTest.java | 50 ++++++++++++++++++++
3 files changed, 63 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/25057330/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index f9e3e34,dea2003..0c966b8
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,13 -1,5 +1,14 @@@
+4.0
+ * Add column definition kind to dropped columns in schema (CASSANDRA-12705)
+ * Add (automate) Nodetool Documentation (CASSANDRA-12672)
+ * Update bundled cqlsh python driver to 3.7.0 (CASSANDRA-12736)
+ * Reject invalid replication settings when creating or altering a keyspace (CASSANDRA-12681)
+ * Clean up the SSTableReader#getScanner API wrt removal of RateLimiter (CASSANDRA-12422)
+Merged from 3.0:
+ * Include SSTable filename in compacting large row message (CASSANDRA-12384)
+
3.10
+ * Use non-token restrictions for bounds when token restrictions are overridden (CASSANDRA-12419)
* Fix CQLSH auto completion for PER PARTITION LIMIT (CASSANDRA-12803)
* Use different build directories for Eclipse and Ant (CASSANDRA-12466)
* Avoid potential AttributeError in cqlsh due to no table metadata (CASSANDRA-12815)