[
https://issues.apache.org/jira/browse/CASSANDRA-19955?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ariel Weisberg updated CASSANDRA-19955:
---------------------------------------
Status: Review In Progress (was: Needs Committer)
> Accord should not block partition restricted Index queries
> ----------------------------------------------------------
>
> Key: CASSANDRA-19955
> URL: https://issues.apache.org/jira/browse/CASSANDRA-19955
> Project: Cassandra
> Issue Type: Bug
> Components: Accord
> Reporter: David Capwell
> Assignee: Ariel Weisberg
> Priority: Normal
> Fix For: 5.x
>
> Attachments: ci_summary-cep-15-accord.html, ci_summary.html
>
>
> Accord requires partitions as part of the tracking protocol, which limits the
> use of range queries as no partition is known. There are valid use cases for
> partition restricted index queries, yet those appear to be range queries
> which causes Accord to block them.
> Rather than checking the type of the query, we should check if it has the
> following
> 1) selects a partition
> 2) if in LET clause, returns at most 1 run
> Partition restricted index queries fit this, so should be allowed in both LET
> and returning SELECT clauses
> Below is a test showing this doesn’t work
> {code}
> CREATE TABLE keyspace_test_00."tbl" (
> "pk1" tinyint,
> "pk2" ascii,
> "ck" frozen<map<frozen<set<date>>,
> 'org.apache.cassandra.db.marshal.DynamicCompositeType(p=>org.apache.cassandra.db.marshal.ShortType,n=>org.apache.cassandra.db.marshal.Int32Type,c=>org.apache.cassandra.db.marshal.IntegerType)'>>,
> "s1" frozen<map<frozen<list<inet>>,
> 'org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.DecimalType)'>>
> static,
> "s2" set<vector<uuid, 2>> static,
> "v1"
> 'org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.ListType(org.apache.cassandra.db.marshal.TimeUUIDType),org.apache.cassandra.db.marshal.TimeType)',
> "v2" frozen<list<'org.apache.cassandra.db.marshal.LexicalUUIDType'>>,
> PRIMARY KEY (("pk1", "pk2"), "ck")
> ) WITH CLUSTERING ORDER BY ("ck" ASC);
> CREATE INDEX ON keyspace_test_00.”tbl”(v2) USING ’sai’;
> BEGIN TRANSACTION
> SELECT *
> FROM keyspace_test_00."tbl"
> WHERE "v2" = ? AND "pk1" = (tinyint) ? - (tinyint) ? AND "pk2" = ?
> LIMIT 1;
> COMMIT TRANSACTION;
> {code}
> Fails with
> {code}
> Caused by: org.apache.cassandra.exceptions.InvalidRequestException: Range
> queries are not allowed for reads within a transaction; returning select at
> [2:3]
> at
> org.apache.cassandra.cql3.statements.RequestValidations.invalidRequest(RequestValidations.java:370)
> at
> org.apache.cassandra.cql3.statements.RequestValidations.checkTrue(RequestValidations.java:97)
> at
> org.apache.cassandra.cql3.statements.RequestValidations.checkFalse(RequestValidations.java:223)
> at
> org.apache.cassandra.cql3.statements.TransactionStatement$Parsed.checkAtMostOneRowSpecified(TransactionStatement.java:603)
> at
> org.apache.cassandra.cql3.statements.TransactionStatement$Parsed.prepare(TransactionStatement.java:558)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]