David Capwell created CASSANDRA-19955:
-----------------------------------------
Summary: 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
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]