Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-8090

NullPointerException when using prepared statements

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Normal
    • Resolution: Fixed
    • Fix Version/s: 2.2.0 beta 1
    • Component/s: Legacy/CQL
    • Labels:
      None

      Description

      Due to the changes in CASSANDRA-4914, using a prepared statement from multiple threads leads to a race condition where the simple selection may be reset from a different thread, causing the following NPE:

      java.lang.NullPointerException: null
      	at org.apache.cassandra.cql3.ResultSet.addRow(ResultSet.java:63) ~[main/:na]
      	at org.apache.cassandra.cql3.statements.Selection$ResultSetBuilder.build(Selection.java:372) ~[main/:na]
      	at org.apache.cassandra.cql3.statements.SelectStatement.process(SelectStatement.java:1120) ~[main/:na]
      	at org.apache.cassandra.cql3.statements.SelectStatement.processResults(SelectStatement.java:283) ~[main/:na]
      	at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:260) ~[main/:na]
      	at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:213) ~[main/:na]
      	at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:63) ~[main/:na]
      	at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:226) ~[main/:na]
      	at org.apache.cassandra.cql3.QueryProcessor.processPrepared(QueryProcessor.java:481) ~[main/:na]
      	at org.apache.cassandra.transport.messages.ExecuteMessage.execute(ExecuteMessage.java:133) ~[main/:na]
      	at org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:438) [main/:na]
      	at org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:334) [main/:na]
      	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [netty-all-4.0.23.Final.jar:4.0.23.Final]
      	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [netty-all-4.0.23.Final.jar:4.0.23.Final]
      	at io.netty.channel.AbstractChannelHandlerContext.access$700(AbstractChannelHandlerContext.java:32) [netty-all-4.0.23.Final.jar:4.0.23.Final]
      	at io.netty.channel.AbstractChannelHandlerContext$8.run(AbstractChannelHandlerContext.java:324) [netty-all-4.0.23.Final.jar:4.0.23.Final]
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_67]
      	at org.apache.cassandra.concurrent.AbstractTracingAwareExecutorService$FutureTask.run(AbstractTracingAwareExecutorService.java:163) [main/:na]
      	at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:103) [main/:na]
      	at java.lang.Thread.run(Thread.java:745) [na:1.7.0_67]
      

      Reproduced this using the stress tool:

       ./tools/bin/cassandra-stress user profile=tools/cqlstress-example.yaml ops\(insert=1,simple1=1\)
      

      You'll need to change the

      select:

      line to be /1000 to prevent the illegal query exceptions.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                blerer Benjamin Lerer
                Reporter:
                carlyeks Carl Yeksigian
                Authors:
                Benjamin Lerer
                Reviewers:
                Sylvain Lebresne
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: