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

Brandon Williams updated CASSANDRA-16266:
-----------------------------------------
    Resolution: Won't Fix
        Status: Resolved  (was: Triage Needed)

There are more than 20 point release after this in the 2.1 line that may have 
fixed this, and both version are EOL at his point regardless.  Please try newer 
supported versions and open a new ticket if the behavior reproduces.

> 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