You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Yongle Zhang (Jira)" <ji...@apache.org> on 2020/11/13 04:26:00 UTC

[jira] [Commented] (CASSANDRA-16266) Stress testing a mixed cluster with C* 2.1.0 (seed) and 2.0.0 causes NPE

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

Yongle Zhang commented on CASSANDRA-16266:
------------------------------------------

[~brandon.williams] Thank you! We verified that the missing 'replicate_on_write' exist in the latest 2.1.x version. 

If 2.1.x is no longer supported. I'll try later versions. Thank you!

> 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: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org