[ 
https://issues.apache.org/jira/browse/CASSANDRA-18939?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17801844#comment-17801844
 ] 

Andres de la Peña commented on CASSANDRA-18939:
-----------------------------------------------

The fix looks good to me. That version on {{getBestIndexFor}} might have a 
better name, such as {{{}getIndexesFor{}}}. After all, it's not returning the 
best/first index for the expression, but the set of all the indexes for the 
specified expression and class. Alternatively, it could keep the current name 
and return the first index matching the arguments, like the other version of 
{{{}getBestIndexFor{}}}.

> Creating a SASI index after creating an SAI index breaks secondary index 
> queries
> --------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-18939
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-18939
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Feature/2i Index
>            Reporter: Jon Haddad
>            Assignee: Stefan Miklosovic
>            Priority: Normal
>             Fix For: 5.0-rc, 5.x
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> In the 5.0 branch, HEAD is e45c1092f91edd63591f562b2120ea6a5fd3edd5, I was 
> able to break secondary indexes by doing the following:
> {code}
> cqlsh -e "create KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 
> 'replication_factor': 1};"
> cqlsh -e "create table test.blah (id int primary key, val text);"
> cqlsh -e "create INDEX on test.blah (val) using 'sai';"
> bin/nodetool flush
> ❯ cqlsh -e "SELECT * from test.blah WHERE val = 'something';"
>  id | val
> ----+-----
> (0 rows)
> cqlsh -e "create custom INDEX on test.blah (val) using 
> 'org.apache.cassandra.index.sasi.SASIIndex';"
> Warnings :
> SASI indexes are experimental and are not recommended for production use.
> cqlsh -e "SELECT * from test.blah WHERE val = 'something';"
> <stdin>:1: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}
> Server throws an exception:
> {code}
> ERROR [ReadStage-2] 2023-10-18 12:09:42,391 JVMStabilityInspector.java:70 - 
> Exception in thread Thread[ReadStage-2,10,SharedPool]
> java.lang.RuntimeException: java.lang.ClassCastException: class 
> org.apache.cassandra.index.sai.StorageAttachedIndex cannot be cast to class 
> org.apache.cassandra.index.sasi.SASIIndex 
> (org.apache.cassandra.index.sai.StorageAttachedIndex and 
> org.apache.cassandra.index.sasi.SASIIndex are in unnamed module of loader 
> 'app')
>       at 
> org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2585)
>       at 
> org.apache.cassandra.concurrent.ExecutionFailure$2.run(ExecutionFailure.java:163)
>       at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:143)
>       at 
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>       at java.base/java.lang.Thread.run(Thread.java:829)
> Caused by: java.lang.ClassCastException: class 
> org.apache.cassandra.index.sai.StorageAttachedIndex cannot be cast to class 
> org.apache.cassandra.index.sasi.SASIIndex 
> (org.apache.cassandra.index.sai.StorageAttachedIndex and 
> org.apache.cassandra.index.sasi.SASIIndex are in unnamed module of loader 
> 'app')
>       at 
> org.apache.cassandra.index.sasi.plan.QueryController.getIndex(QueryController.java:96)
>       at 
> org.apache.cassandra.index.sasi.plan.Operation.analyzeGroup(Operation.java:282)
>       at 
> org.apache.cassandra.index.sasi.plan.Operation$Builder.complete(Operation.java:433)
>       at 
> org.apache.cassandra.index.sasi.plan.SASIIndexSearcher.analyze(SASIIndexSearcher.java:65)
>       at 
> org.apache.cassandra.index.sasi.plan.SASIIndexSearcher.search(SASIIndexSearcher.java:77)
>       at 
> org.apache.cassandra.db.ReadCommand.executeLocally(ReadCommand.java:425)
>       at 
> org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:2184)
>       at org.apache.cassandra.service
> {code}
> Dropping the SASI index restores correct behavior.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to