Zhuqi Jin created CASSANDRA-16257: ------------------------------------- Summary: When upgrading from 2.1.0 to 2.2.0, UnknownColumnFamilyException encountered on upgraded nodes Key: CASSANDRA-16257 URL: https://issues.apache.org/jira/browse/CASSANDRA-16257 Project: Cassandra Issue Type: Bug Reporter: Zhuqi Jin
Both using 2.1.0 node as seed and using 2.2.0 node as seed will fail with this similar error: {code:java} org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find cfId=49a44701-d6bc-11ea-848f-4766f428c026 (when using 2.1.0 node as seed) org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find cfId=727d9450-d6c7-11ea-9370-4766f428c026 (when using 2.2.0 node as seed)at org.apache.cassandra.db.ColumnFamilySerializer.deserializeCfId(ColumnFamilySerializer.java:164) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.db.ColumnFamilySerializer.deserialize(ColumnFamilySerializer.java:97) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.db.Mutation$MutationSerializer.deserializeOneCf(Mutation.java:322) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.db.Mutation$MutationSerializer.deserialize(Mutation.java:302) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.db.Mutation$MutationSerializer.deserialize(Mutation.java:330) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.db.Mutation$MutationSerializer.deserialize(Mutation.java:272) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.net.MessageIn.read(MessageIn.java:99) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.net.IncomingTcpConnection.receiveMessage(IncomingTcpConnection.java:165) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.net.IncomingTcpConnection.handleModernVersion(IncomingTcpConnection.java:147) ~[apache-cassandra-2.1.0.jar:2.1.0]at org.apache.cassandra.net.IncomingTcpConnection.run(IncomingTcpConnection.java:82) ~[apache-cassandra-2.1.0.jar:2.1.0]{code} This seems to originate from the difference in the settings in the stress tests, and is not a data format bug. The field `cfId` is a UUID string generated from another two fields: `ksName` and `cfName`. These two names are not the interior settings in the cluster, instead they come from user specification. In 2.1.0, the stress test configures these two names to be “Keyspace1” and “Standard1”. See [https://github.com/apache/cassandra/blob/cassandra-2.1.0/tools/stress/src/org/apache/cassandra/stress/settings/SettingsSchema.java#L84] . Here is my log: {code:java} WARN [MigrationStage:1] 2020-08-05 03:17:20,514 Schema.java:330 - Schema.load: Adding org.apache.cassandra.config.CFMetaData@6299796f…..., key = (Keyspace1,Standard1), val = 49a44701-d6bc-11ea-848f-4766f428c026 {code} In 2.2.0, the stress test configures these two names to be “keyspace1” and “standard1” (note that the names are case-sensitive). See https://github.com/apache/cassandra/blob/cassandra-2.2.0/tools/stress/src/org/apache/cassandra/stress/settings/SettingsSchema.java#L225 . Here is my log: {code:java} WARN [MigrationStage:1] 2020-08-05 02:57:49,680 Schema.java:350 - Schema.load: Adding org.apache.cassandra.config.CFMetaData@719822c2……..., key = (keyspace1,standard1), val = 727d9450-d6c7-11ea-9370-4766f428c026 {code} When a 2.2.0 message reaches a 2.1.0 node, or vice versa, the receiver will look up the `cfId` field in a map. Since the key is not present in its own map, the look up will fail with the above message. Unluckily this problem is quite hard to fix, since many other places also depend on the name. So I can not overcome this problem and find actual data format bugs between these two versions currently. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org