[
https://issues.apache.org/jira/browse/CASSANDRA-20596?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pranav reassigned CASSANDRA-20596:
----------------------------------
Assignee: Pranav
> NPE when executing IF block in transactions with invalid comparison
> -------------------------------------------------------------------
>
> Key: CASSANDRA-20596
> URL: https://issues.apache.org/jira/browse/CASSANDRA-20596
> Project: Apache Cassandra
> Issue Type: Bug
> Components: Accord
> Reporter: Jon Haddad
> Assignee: Pranav
> Priority: Normal
> Fix For: 5.x
>
> Attachments: corrupt.zip
>
>
> I managed to catch a NPE when trying to execute a transaction. This came
> about from an error in my syntax, but I think we should handle this more
> gracefully.
> Here's the setup:
>
>
> {noformat}
> create KEYSPACE games WITH replication = {'class': 'SimpleStrategy',
> 'replication_factor': 1};
> USE games;
> CREATE TABLE games.high_scores_by_user ( user text, game text, score int,
> primary key(user, game))
> WITH compaction = {'class': 'UnifiedCompactionStrategy',
> 'scaling_parameters': 'L10'}
> AND transactional_mode = 'full';
> CREATE TABLE games.leaderboard (game text, score int, user text, primary key
> (game, score, user))
> WITH compaction = {'class': 'UnifiedCompactionStrategy',
> 'scaling_parameters': 'L10'}
> AND clustering order by (score DESC, user ASC)
> AND transactional_mode = 'full';
> {noformat}
>
> The query:
>
> {noformat}
> BEGIN TRANSACTION
> LET high_score = (SELECT * from games.high_scores_by_user WHERE user =
> 'jon' and game = 'pictionary');
> SELECT high_score.score;
> IF high_score = 100 THEN
> INSERT INTO games.high_scores_by_user (game, score, user) VALUES
> ('pictionary', 110, 'jon');
> INSERT INTO games.leaderboard (game, score, user) VALUES ('pictionary',
> 110, 'jon');
> DELETE from games.leaderboard WHERE user = 'jon' AND game = 'pictionary'
> AND score = 100;
> END IF
> COMMIT TRANSACTION;{noformat}
> In the IF block I forgot to put the field I was comparing, it should have
> been high_score.score, and got the following:
>
> {noformat}
> NoHostAvailable: ('Unable to complete the operation against any hosts',
> {<Host: 127.0.0.1:9042 datacenter1>: <Error from server: code=0000 [Server
> error] message="java.lang.NullPointerException: Cannot read field "type"
> because "receiver" is null">}){noformat}
> On the server side, I see this:
>
> {noformat}
> ERROR [Native-Transport-Requests-1] 2025-04-24 16:00:15,711
> QueryMessage.java:130 - Unexpected error during query
> java.lang.NullPointerException: Cannot read field "type" because "receiver"
> is null
> at
> org.apache.cassandra.cql3.terms.Constants$Literal.testAssignment(Constants.java:326)
> at
> org.apache.cassandra.cql3.terms.Constants$Literal.prepare(Constants.java:295)
> at
> org.apache.cassandra.cql3.terms.Constants$Literal.prepare(Constants.java:243)
> at
> org.apache.cassandra.cql3.transactions.ConditionStatement$Raw.prepare(ConditionStatement.java:105)
> at
> org.apache.cassandra.cql3.statements.TransactionStatement$Parsed.prepare(TransactionStatement.java:734)
> at
> org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:911)
> at org.apache.cassandra.cql3.QueryProcessor.parse(QueryProcessor.java:360)
> at
> org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:116)
> at
> org.apache.cassandra.transport.Message$Request.execute(Message.java:259)
> at
> org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:423)
> at
> org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:442)
> at
> org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:469)
> at
> org.apache.cassandra.transport.Dispatcher$RequestProcessor.run(Dispatcher.java:314)
> at org.apache.cassandra.concurrent.FutureTask$1.call(FutureTask.java:99)
> at org.apache.cassandra.concurrent.FutureTask.call(FutureTask.java:61)
> at org.apache.cassandra.concurrent.FutureTask.run(FutureTask.java:71)
> at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:145)
> at
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> at java.base/java.lang.Thread.run(Thread.java:840){noformat}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]