Stefan Miklosovic created CASSANDRA-18994:
---------------------------------------------

             Summary: SAI range query does not play together with "IN"
                 Key: CASSANDRA-18994
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-18994
             Project: Cassandra
          Issue Type: Bug
          Components: Feature/SAI
            Reporter: Stefan Miklosovic


I am using schema from the website's quickstart.

{code}
cqlsh> DESCRIBE KEYSPACE cycling ;

CREATE KEYSPACE cycling WITH replication = {'class': 'SimpleStrategy', 
'replication_factor': '1'}  AND durable_writes = true;

CREATE TABLE cycling.cyclist_semi_pro (
    id int PRIMARY KEY,
    affiliation text,
    age int,
    country text,
    firstname text,
    lastname text,
    registration date
) WITH additional_write_policy = '99p'
    AND allow_auto_snapshot = true
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND cdc = false
    AND comment = ''
    AND compaction = {'class': 
'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 
'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '16', 'class': 
'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND memtable = 'default'
    AND crc_check_chance = 1.0
    AND default_time_to_live = 0
    AND extensions = {}
    AND gc_grace_seconds = 864000
    AND incremental_backups = true
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair = 'BLOCKING'
    AND speculative_retry = '99p';

CREATE CUSTOM INDEX age_sai_idx ON cycling.cyclist_semi_pro (age) USING 
'StorageAttachedIndex';

CREATE CUSTOM INDEX country_sai_idx ON cycling.cyclist_semi_pro (country) USING 
'StorageAttachedIndex' WITH OPTIONS = {'ascii': 'true', 'case_sensitive': 
'false', 'normalize': 'true'};

CREATE CUSTOM INDEX lastname_sai_idx ON cycling.cyclist_semi_pro (lastname) 
USING 'StorageAttachedIndex' WITH OPTIONS = {'ascii': 'true', 'case_sensitive': 
'false', 'normalize': 'true'};

CREATE CUSTOM INDEX registration_sai_idx ON cycling.cyclist_semi_pro 
(registration) USING 'StorageAttachedIndex';

{code}

Then I do:

{code}
cqlsh> SELECT * FROM cycling.cyclist_semi_pro WHERE lastname in ('Cantona', 
'Boyd');
InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot 
execute this query as it might involve data filtering and thus may have 
unpredictable performance. If you want to execute this query despite the 
performance unpredictability, use ALLOW FILTERING"

cqlsh> SELECT * FROM cycling.cyclist_semi_pro WHERE lastname in ('Cantona', 
'Boyd') ALLOW FILTERING;

 id | affiliation     | age | country | firstname | lastname | registration
----+-----------------+-----+---------+-----------+----------+--------------
  5 |   Como Velocità |  24 |     ITA |     Irene |  Cantona |   2012-07-22
 20 | London Cyclists |  18 |     GBR |    Leslie |     Boyd |   2012-12-15

{code}

But check this:

{code}
cqlsh> SELECT * FROM cycling.cyclist_semi_pro WHERE registration > '2010-01-01' 
AND registration < '2015-12-31' and lastname in ('Cantona', 'Boyd') allow 
filtering;

ReadFailure: Error from server: code=1300 [Replica(s) failed to execute read] 
message="Operation failed - received 0 responses and 1 failures: UNKNOWN from 
localhost/127.0.0.1:7000" info={'consistency': 'ONE', 'required_responses': 1, 
'received_responses': 0, 'failures': 1, 'error_code_map': {'127.0.0.1': 
'0x0000'}}
{code}

and in the logs:

{code}
java.lang.AssertionError: null
        at 
org.apache.cassandra.index.sai.plan.Expression.add(Expression.java:171)
        at 
org.apache.cassandra.index.sai.plan.Operation.buildIndexExpressions(Operation.java:136)
        at 
org.apache.cassandra.index.sai.plan.Operation$AndNode.analyze(Operation.java:303)
        at 
org.apache.cassandra.index.sai.plan.Operation$Node.doTreeAnalysis(Operation.java:266)
        at 
org.apache.cassandra.index.sai.plan.Operation$Node.analyzeTree(Operation.java:251)
        at 
org.apache.cassandra.index.sai.plan.Operation.buildIterator(Operation.java:185)
        at 
org.apache.cassandra.index.sai.plan.StorageAttachedIndexSearcher$ResultRetriever.<init>(StorageAttachedIndexSearcher.java:151)
        at 
org.apache.cassandra.index.sai.plan.StorageAttachedIndexSearcher.search(StorageAttachedIndexSearcher.java:107)
        at 
org.apache.cassandra.db.ReadCommand.executeLocally(ReadCommand.java:431)
        at 
org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:2184)
        at 
org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2581)
        at 
org.apache.cassandra.concurrent.ExecutionFailure$2.run(ExecutionFailure.java:163)
        at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:143)
{code}

If it is not supported it should not throw and it should print appropriate 
message.

If it is supported I guess this is a bug?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to