Details
-
Bug
-
Status: Resolved
-
Low
-
Resolution: Fixed
-
None
-
Apache Cassandra 2.1.8.689
-
Low
Description
Running this query with paging off returns a NullPointerException:
cqlsh:test> SELECT value, ttl(value), last_modified FROM test where useruid='userid1' AND direction IN ('out','in') ORDER BY last_modified;
ServerError: <ErrorMessage code=0000 [Server error] message="java.lang.NullPointerException">
Here's the stack trace from the system.log:
ERROR [SharedPool-Worker-1] 2015-09-17 13:11:03,937 ErrorMessage.java:251 - Unexpected exception during request
java.lang.NullPointerException: null
at org.apache.cassandra.db.marshal.LongType.compareLongs(LongType.java:41) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.db.marshal.TimestampType.compare(TimestampType.java:48) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.db.marshal.TimestampType.compare(TimestampType.java:38) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.cql3.statements.SelectStatement$SingleColumnComparator.compare(SelectStatement.java:2419) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.cql3.statements.SelectStatement$SingleColumnComparator.compare(SelectStatement.java:2406) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:351) ~[na:1.8.0_40]
at java.util.TimSort.sort(TimSort.java:216) ~[na:1.8.0_40]
at java.util.Arrays.sort(Arrays.java:1512) ~[na:1.8.0_40]
at java.util.ArrayList.sort(ArrayList.java:1454) ~[na:1.8.0_40]
at java.util.Collections.sort(Collections.java:175) ~[na:1.8.0_40]
at org.apache.cassandra.cql3.statements.SelectStatement.orderResults(SelectStatement.java:1400) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.cql3.statements.SelectStatement.process(SelectStatement.java:1255) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.cql3.statements.SelectStatement.processResults(SelectStatement.java:299) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:276) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:224) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:67) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:238) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at com.datastax.bdp.cassandra.cql3.DseQueryHandler$StatementExecution.execute(DseQueryHandler.java:291) ~[dse.jar:4.7.3]
at com.datastax.bdp.cassandra.cql3.DseQueryHandler$Operation.executeWithTiming(DseQueryHandler.java:223) ~[dse.jar:4.7.3]
at com.datastax.bdp.cassandra.cql3.DseQueryHandler$Operation.executeWithAuditLogging(DseQueryHandler.java:259) ~[dse.jar:4.7.3]
at com.datastax.bdp.cassandra.cql3.DseQueryHandler.process(DseQueryHandler.java:94) ~[dse.jar:4.7.3]
at org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:122) ~[cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:439) [cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:335) [cassandra-all-2.1.8.689.jar:2.1.8.689]
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:511) [na:1.8.0_40]
at org.apache.cassandra.concurrent.AbstractTracingAwareExecutorService$FutureTask.run(AbstractTracingAwareExecutorService.java:164) [cassandra-all-2.1.8.689.jar:2.1.8.689]
at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:105) [cassandra-all-2.1.8.689.jar:2.1.8.689]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_40]
Here's the full reproduction:
CREATE KEYSPACE TEST
WITH replication =
AND durable_writes = true;
USE test;
CREATE TABLE test (
useruid varchar,
direction varchar,
last_modified timestamp,
value varchar,
PRIMARY KEY ((useruid, direction), last_modified)
);
//insert 4 entries in the table
INSERT INTO test (useruid,direction,last_modified,value) VALUES ('userid1', 'out', '2013-05-13 15:18:51', 'a value1');
INSERT INTO test (useruid,direction,last_modified,value) VALUES ('userid1', 'out', '2013-05-13 15:12:51', 'a value2');
INSERT INTO test (useruid,direction,last_modified,value) VALUES ('userid1', 'none', '2013-05-13 15:20:51', 'a value3');
INSERT INTO test (useruid,direction,last_modified,value) VALUES ('userid1', 'in', '2013-05-13 15:34:51', 'a value4');
First query to check the value in the table, and its results :
SELECT value, ttl(value), last_modified FROM test;
value | ttl(value) | last_modified
--------------------------------------------
a value4 | null | 2013-05-13 15:34:51+0000
a value2 | null | 2013-05-13 15:12:51+0000
a value1 | null | 2013-05-13 15:18:51+0000
a value3 | null | 2013-05-13 15:20:51+0000
(4 rows)
Run this query using the IN clause and the ORDER BY clause, but it fails with an error:
SELECT value, ttl(value), last_modified FROM test where useruid='userid1' AND direction IN ('out','in') ORDER BY last_modified;
InvalidRequest: code=2200 [Invalid query] message="Cannot page queries with both ORDER BY and a IN restriction on the partition key; you must either remove the ORDER BY or the IN and sort client side, or disable paging for this query"
If you run the same query without the ttl(value) in the SELECT part, it also shows the same error:
SELECT value, last_modified FROM test where useruid='userid1' AND direction IN ('out','in') ORDER BY last_modified;
InvalidRequest: code=2200 [Invalid query] message="Cannot page queries with both ORDER BY and a IN restriction on the partition key; you must either remove the ORDER BY or the IN and sort client side, or disable paging for this query"
This message suggests these JIRAs are the reason for this message:
https://issues.apache.org/jira/browse/CASSANDRA-7853 select . . . in . . . order by regression
Resolution: Duplicate of CASSANDRA-7514
Fix Version/s: None
https://issues.apache.org/jira/browse/CASSANDRA-7514 Support paging in cqlsh
Resolution: Fixed
Fix Version/s: 2.1.1
https://issues.apache.org/jira/browse/CASSANDRA-6722 cross-partition ordering should have warning or be disallowed when paging
Resolution: Fixed
Fix Version/s: 2.0.6
If I turn off paging:
cqlsh:test> paging off;
Disabled Query paging.
Then re-run the query without the ttl(value) I see the results:
cqlsh:test> SELECT value, last_modified FROM test where useruid='userid1' AND direction IN ('out','in') ORDER BY last_modified;
value | last_modified
---------+-------------------------
a value2 | 2013-05-13 15:12:51+0000
a value1 | 2013-05-13 15:18:51+0000
a value4 | 2013-05-13 15:34:51+0000
(3 rows)
However, if you now re-run this query with the ttl(value) you get a NullPointerException:
cqlsh:test> SELECT value, ttl(value), last_modified FROM test where useruid='userid1' AND direction IN ('out','in') ORDER BY last_modified;
ServerError: <ErrorMessage code=0000 [Server error] message="java.lang.NullPointerException">
Attachments
Attachments
Issue Links
- is duplicated by
-
CASSANDRA-10556 Wrong order returned when querying ttl(value) and using SELECT IN + ORDER BY
- Resolved