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: [email protected]
For additional commands, e-mail: [email protected]