[ 
https://issues.apache.org/jira/browse/CASSANDRA-15923?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andres de la Peña reassigned CASSANDRA-15923:
---------------------------------------------

    Assignee: Andres de la Peña

> Collection types written via prepared statement not checked for nulls
> ---------------------------------------------------------------------
>
>                 Key: CASSANDRA-15923
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15923
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Messaging/Client
>            Reporter: Tom van der Woerdt
>            Assignee: Andres de la Peña
>            Priority: Normal
>
> To reproduce:
> {code:java}
> >>> cluster = Cluster()
> >>> session = cluster.connect()
> >>> session.execute("create keyspace frozen_int_test with replication = 
> >>> {'class': 'SimpleStrategy', 'replication_factor': 1}")
> >>> session.execute("create table frozen_int_test.mytable (id int primary 
> >>> key, value frozen<list<int>>)")
> >>> session.execute(session.prepare("insert into frozen_int_test.mytable (id, 
> >>> value) values (?, ?)"), (1, [1,2,3]))
> >>> list(session.execute("select * from frozen_int_test.mytable"))
> [Row(id=1, value=[1, 2, 3])]
> >>> session.execute(session.prepare("insert into frozen_int_test.mytable (id, 
> >>> value) values (?, ?)"), (1, [1,2,None]))
> >>> list(session.execute("select * from frozen_int_test.mytable"))
> [Row(id=1, value=[1, 2, None])] {code}
> Now you might say "But Tom, that just shows that it works!", but this does 
> not work as a CQL literal:
> {code:java}
> >>> session.execute("insert into frozen_int_test.mytable (id, value) values 
> >>> (1, [1,2,null])")
> [...] cassandra.InvalidRequest: Error from server: code=2200 [Invalid query] 
> message="null is not supported inside collections" {code}
> Worse, if a mutation like this makes it way into the hints, it will be 
> retried indefinitely as it fails validation with a NullPointerException:
> {code:java}
> ERROR [MutationStage-11] 2020-07-06 09:23:25,696 
> AbstractLocalAwareExecutorService.java:169 - Uncaught exception on thread 
> Thread[MutationStage-11,5,main]
> java.lang.NullPointerException: null
>     at 
> org.apache.cassandra.serializers.Int32Serializer.validate(Int32Serializer.java:41)
>  ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.serializers.ListSerializer.validateForNativeProtocol(ListSerializer.java:70)
>  ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.serializers.CollectionSerializer.validate(CollectionSerializer.java:56)
>  ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.db.marshal.AbstractType.validate(AbstractType.java:162) 
> ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.db.marshal.AbstractType.validateCellValue(AbstractType.java:196)
>  ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.db.marshal.CollectionType.validateCellValue(CollectionType.java:124)
>  ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.config.ColumnDefinition.validateCell(ColumnDefinition.java:410)
>  ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.db.rows.AbstractCell.validate(AbstractCell.java:154) 
> ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.db.partitions.PartitionUpdate.validate(PartitionUpdate.java:486)
>  ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at java.util.Collections$SingletonSet.forEach(Collections.java:4769) 
> ~[na:1.8.0_252]
>     at 
> org.apache.cassandra.hints.HintVerbHandler.doVerb(HintVerbHandler.java:69) 
> ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:66) 
> ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
> ~[na:1.8.0_252]
>     at 
> org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$FutureTask.run(AbstractLocalAwareExecutorService.java:165)
>  ~[apache-cassandra-3.11.6.jar:3.11.6]
>     at 
> org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$LocalSessionFutureTask.run(AbstractLocalAwareExecutorService.java:137)
>  [apache-cassandra-3.11.6.jar:3.11.6]
>     at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:113) 
> [apache-cassandra-3.11.6.jar:3.11.6]
>     at java.lang.Thread.run(Thread.java:748) [na:1.8.0_252] {code}
> A similar problem is reproducible when writing into a non-frozen column.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to