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

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

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

> During rolling upgrade from C* 2.0.0 to 2.1.0, upgraded node fails with 
> IllegalArgumentException
> ------------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-16265
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-16265
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Yongle Zhang
>            Priority: Normal
>
> Steps to reproduce: 
>  # start a 2-node C* 2.0.0 cluster with 1 seed. 
>  # upgrade the non-seed node to 2.1.0
>  # run stress testing using /tools/bin/stress on two nodes, wait or it to 
> finish. 
> Error stack trace:
> {code:java}
> java.lang.IllegalArgumentException: No enum constant 
> org.apache.cassandra.config.CFMetaData.Caching.{"keys":"ALL", 
> "rows_per_partition":"NONE"}
>   at java.lang.Enum.valueOf(Enum.java:238)
>   at 
> org.apache.cassandra.config.CFMetaData$Caching.valueOf(CFMetaData.java:261)
>   at 
> org.apache.cassandra.config.CFMetaData.fromSchemaNoColumnsNoTriggers(CFMetaData.java:1567)
>   at org.apache.cassandra.config.CFMetaData.fromSchema(CFMetaData.java:1642)
>   at 
> org.apache.cassandra.config.KSMetaData.deserializeColumnFamilies(KSMetaData.java:312)
>   at 
> org.apache.cassandra.db.DefsTables.mergeColumnFamilies(DefsTables.java:309)
>   at org.apache.cassandra.db.DefsTables.mergeSchema(DefsTables.java:184)
>   at 
> org.apache.cassandra.service.MigrationTask$1.response(MigrationTask.java:67)
>   at 
> org.apache.cassandra.net.ResponseVerbHandler.doVerb(ResponseVerbHandler.java:46)
>   at 
> org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:57)
>   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 2.0.0 `CFMetaData.Caching` is an enum of 4 possible values. It is 
> serialized and deserialized using the Java builtin methods `valueOf` and 
> `toString` for enum class. See 
> [https://github.com/apache/cassandra/blob/03045ca22b11b0e5fc85c4fabd83ce6121b5709b/src/java/org/apache/cassandra/config/CFMetaData.java#L1567]
>  (ser) and 
> [https://github.com/apache/cassandra/blob/03045ca22b11b0e5fc85c4fabd83ce6121b5709b/src/java/org/apache/cassandra/config/CFMetaData.java#L1524]
>  (de).
> In 2.1.0, `CachingOptions` is a class consisting of 2 fields. It is 
> serialized and deserialized using a textual form similar to JSON (e.g. the 
> string \{"keys":"ALL", "rows_per_partition":"NONE"} in the above log). See 
> [https://github.com/apache/cassandra/blob/c6a2c65a75adea9a62896269da98dd036c8e57f3/src/java/org/apache/cassandra/cache/CachingOptions.java#L95]
>  (ser) and 
> [https://github.com/apache/cassandra/blob/c6a2c65a75adea9a62896269da98dd036c8e57f3/src/java/org/apache/cassandra/cache/CachingOptions.java#L50]
>  (de).
> Note that in 2.1.0 it will first check whether the input string is one of the 
> 4 possible values in the old version, and will return a predefined constant 
> for these values, so it is compatible with the old versions. Unfortunately 
> the old versions have no idea about how to deserialize the string from the 
> new versions.
>  
>  
>  



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