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

Brandon Williams commented on CASSANDRA-16266:
----------------------------------------------

Thank you for your detailed analysis, it will be very helpful in future 
versions.

> Stress testing a mixed cluster with C* 2.1.0 (seed) and 2.0.0 causes NPE
> ------------------------------------------------------------------------
>
>                 Key: CASSANDRA-16266
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-16266
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Yongle Zhang
>            Priority: Normal
>
> Steps to reproduce: 
>  # setup a mixed cluster with C* 2.1.0 (seed node) and C* 2.0.0
>  # run the stress testing tool, e.g.,
> {code:java}
> /cassandra/tools/bin/cassandra-stress write n=1000 -rate threads=50 -node 
> 250.16.238.1,250.16.238.2{code}
> NPE: 
> {code:java}
> ERROR [InternalResponseStage:2] 2020-07-22 08:29:36,170 CassandraDaemon.java 
> (line 186) Exception in thread Thread[InternalResponseStage:2,5,main]
> java.lang.NullPointerException
>   at 
> org.apache.cassandra.serializers.BooleanSerializer.deserialize(BooleanSerializer.java:33)
>   at 
> org.apache.cassandra.serializers.BooleanSerializer.deserialize(BooleanSerializer.java:24)
>   at 
> org.apache.cassandra.db.marshal.AbstractType.compose(AbstractType.java:142)
>   at 
> org.apache.cassandra.cql3.UntypedResultSet$Row.getBoolean(UntypedResultSet.java:106)
>   at 
> org.apache.cassandra.config.CFMetaData.fromSchemaNoColumnsNoTriggers(CFMetaData.java:1555)
>   at org.apache.cassandra.config.CFMetaData.fromSchema(CFMetaData.java:1642)
>   at 
> org.apache.cassandra.config.KSMetaData.deserializeColumnFamilies(KSMetaData.java:305)
>   at 
> org.apache.cassandra.db.DefsTables.mergeColumnFamilies(DefsTables.java:270)
>   at org.apache.cassandra.db.DefsTables.mergeSchema(DefsTables.java:183)
>   at 
> org.apache.cassandra.service.MigrationTask$1.response(MigrationTask.java:66)
>   at 
> org.apache.cassandra.net.ResponseVerbHandler.doVerb(ResponseVerbHandler.java:46)
>   at 
> org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:56)
>   at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>   at java.lang.Thread.run(Thread.java:748)
> {code}
> Root cause: incompatible data
> In the `CFMetaData` class of version 2.0.0, there is a boolean field named 
> `replicate_on_write`. In the same class of version 2.1.0, however, this field 
> no longer exists. When serializing this class in function 
> `toSchemaNoColumnsNoTriggers`, it will first write all of its fields into a 
> `RowMutation` (in 2.0.0) / `Mutation` (in 2.1.0) class, and then serialize 
> this “Mutation” like class in the same way. In 2.0.0 the `replicate_on_write` 
> field gets serialized at 
> [https://github.com/apache/cassandra/blob/03045ca22b11b0e5fc85c4fabd83ce6121b5709b/src/java/org/apache/cassandra/config/CFMetaData.java#L1514]
>  .
> When deserializing this class in function `fromSchemaNoColumnsNoTriggers`, it 
> reads all its fields from a map-like class `UntypedResultSet.Row`. In 2.0.0 
> the `replicate_on_write` field gets deserialized at 
> [https://github.com/apache/cassandra/blob/03045ca22b11b0e5fc85c4fabd83ce6121b5709b/src/java/org/apache/cassandra/config/CFMetaData.java#L1555]
>  .
> The problem is that the existence of the key is not checked, and the map 
> returns a `null` value because the message from 2.1.0 doesn’t contain the 
> `replicate_on_write` key, which leads to the NullPointerException.
>  



--
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