You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "mck (JIRA)" <ji...@apache.org> on 2019/04/10 12:04:00 UTC

[jira] [Updated] (CASSANDRA-14439) ClassCastException with mixed 1.2.18 + 2.0.17 environment

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

mck updated CASSANDRA-14439:
----------------------------
    Reviewers: mck
       Status: Review In Progress  (was: Patch Available)

> ClassCastException with mixed 1.2.18  + 2.0.17 environment
> ----------------------------------------------------------
>
>                 Key: CASSANDRA-14439
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-14439
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Legacy/Core
>         Environment: Mixed 1.2.18  + 2.0.17 environment, used temporarily during incremental migration process.
>            Reporter: Dariusz Cieslak
>            Assignee: Dariusz Cieslak
>            Priority: Low
>              Labels: easyfix
>         Attachments: cassandra-class-cast-exception-fix.patch
>
>
> During mixed versions tests I've discovered that mixed 1.2.18  + 2.0.17 environment gives the following exception on 2.0.17 node:
> {code}
> java.lang.ClassCastException: org.apache.cassandra.db.SliceByNamesReadCommand cannot be cast to org.apache.cassandra.db.SliceFromReadCommand
> at org.apache.cassandra.db.SliceFromReadCommandSerializer.serializedSize(SliceFromReadCommand.java:242)
> at org.apache.cassandra.db.ReadCommandSerializer.serializedSize(ReadCommand.java:204)
> at org.apache.cassandra.db.ReadCommandSerializer.serializedSize(ReadCommand.java:134)
> at org.apache.cassandra.net.MessageOut.serialize(MessageOut.java:116)
> at org.apache.cassandra.net.OutboundTcpConnection.writeInternal(OutboundTcpConnection.java:251)
> at org.apache.cassandra.net.OutboundTcpConnection.writeConnected(OutboundTcpConnection.java:203)
> at org.apache.cassandra.net.OutboundTcpConnection.run(OutboundTcpConnection.java:151)
> {code}
> The exception is caused by inconsistent commandType handling in ReadCommandSerializer(), 
> {code}
>         out.writeByte(newCommand.commandType.serializedValue);
>         switch (command.commandType) /// <----------- WHY NOT newCommand.commandType -- DCI ???
>         {
>             case GET_BY_NAMES:
>                 SliceByNamesReadCommand.serializer.serialize(newCommand, superColumn, out, version);
>                 break;
>             case GET_SLICES:
>                 SliceFromReadCommand.serializer.serialize(newCommand, superColumn, out, version);
>                 break;
>             default:
>                 throw new AssertionError();
>         }
> {code}
> Proposed fix (also attached as a patch):
> {code}
> diff --git a/src/java/org/apache/cassandra/db/ReadCommand.java b/src/java/org/apache/cassandra/db/ReadCommand.java
> index cadcd7d..f2153e8 100644
> --- a/src/java/org/apache/cassandra/db/ReadCommand.java
> +++ b/src/java/org/apache/cassandra/db/ReadCommand.java
> @@ -153,7 +153,7 @@ class ReadCommandSerializer implements IVersionedSerializer<ReadCommand>
>          }
>  
>          out.writeByte(newCommand.commandType.serializedValue);
> -        switch (command.commandType)
> +        switch (newCommand.commandType)
>          {
>              case GET_BY_NAMES:
>                  SliceByNamesReadCommand.serializer.serialize(newCommand, superColumn, out, version);
> @@ -196,7 +196,7 @@ class ReadCommandSerializer implements IVersionedSerializer<ReadCommand>
>              }
>          }
>  
> -        switch (command.commandType)
> +        switch (newCommand.commandType)
>          {
>              case GET_BY_NAMES:
>                  return 1 + SliceByNamesReadCommand.serializer.serializedSize(newCommand, superColumn, version);
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org