[
https://issues.apache.org/jira/browse/CASSANDRA-15946?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17163612#comment-17163612
]
Alex Petrov edited comment on CASSANDRA-15946 at 7/24/20, 9:48 AM:
-------------------------------------------------------------------
[UPD] after checking the issue closer.
It looks like the problem occurs when 4.0 is trying to _serialize_ 3.0
response, which it doesn't have to do most of the time. To be honest, I would
just patch it up with something as simple as
{{Verb.REQUEST_RSP.unsafeSetSerializer(() -> ReadResponse.serializer);}} in the
{{Instance}} startup, instead of trying to change serializers.
was (Author: ifesdjeen):
bq. no wonder, why would Cassandra 4.0 need to be able to serialize Cassandra
3.0 payloads
4.0 has to be able to serialize 3.0 payloads since it has to be able to
communicate in mixed mode. However, serializer for request response is set to
null.
Generally, there should not be anything specific to serialization in in-jvm
dtests. If you could describe the communication problem in more details, and
attach a minimal reproduce to the patch, it would be easier to understand
what's going on. Main thing I'm trying to rule out here is that we don't _also_
have the same problem in real clusters. I did try the test from
{{jwest/15833-3.11}} but I'm not sure how that would help since the problem is
between 3.x and 4.0 here.
> NPE when sending REQUEST_RSP from 3.0 to 4.0 in in-jvm dtests
> -------------------------------------------------------------
>
> Key: CASSANDRA-15946
> URL: https://issues.apache.org/jira/browse/CASSANDRA-15946
> Project: Cassandra
> Issue Type: Bug
> Components: Test/dtest
> Reporter: Jacek Lewandowski
> Assignee: Jacek Lewandowski
> Priority: Normal
>
> There is a communication problem when testing upgrades using in-JVM dtest
> between Cassandra 3 and 4.
> In a method {{registerInboundFilter}} of {{Instance}}, we get a message which
> was just received and we prepare it for filtering as part of which, we
> serialize the payload again. This is fine when dealing with incoming
> Cassandra 4 message, because we can serialize it. However when we get the
> Cassandra 3 message, which uses a different protocol, and we get something
> like {{REQUEST_RSP}}, we can surely deserialize it through some special
> deserialization path, but we cannot serialize the payload for it as there is
> no serializer defined for {{REQUEST_RSP}} - no wonder, why would Cassandra
> 4.0 need to be able to serialize Cassandra 3.0 payloads?
> {code}
> java.lang.NullPointerException: null
> at
> org.apache.cassandra.net.Message$Serializer.serializePost40(Message.java:760)
> at
> org.apache.cassandra.net.Message$Serializer.serialize(Message.java:618)
> at
> org.apache.cassandra.distributed.impl.Instance.serializeMessage(Instance.java:267)
> at
> org.apache.cassandra.distributed.impl.Instance.lambda$registerInboundFilter$4(Instance.java:234)
> at
> org.apache.cassandra.net.InboundSink$Filtered.accept(InboundSink.java:62)
> at
> org.apache.cassandra.net.InboundSink$Filtered.accept(InboundSink.java:49)
> at org.apache.cassandra.net.InboundSink.accept(InboundSink.java:93)
> at
> org.apache.cassandra.distributed.impl.Instance.lambda$null$6(Instance.java:305)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> at
> org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$FutureTask.run(AbstractLocalAwareExecutorService.java:165)
> at
> org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$LocalSessionFutureTask.run(AbstractLocalAwareExecutorService.java:137)
> at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:119)
> at
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> at java.lang.Thread.run(Thread.java:748)
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]