[ 
https://issues.apache.org/jira/browse/CASSANDRA-15946?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17178126#comment-17178126
 ] 

David Capwell commented on CASSANDRA-15946:
-------------------------------------------

Ok been testing this out, this is what I see

1) when using mock networking, this patch is required because jvm-dtest filters 
will serialize all messages; this fails without the patch
2) with networking and gossip are used this still fails, but with a different 
error

{code}
DEBUG [node1_GossipStage:1] node1 2020-08-14 18:49:18,033 
MigrationManager.java:96 - Not pulling schema because release version in Gossip 
is not major version 3, it is 4.0-beta2-SNAPSHOT
ERROR 01:49:18 Exception in thread Thread[node2_GossipStage:1,5,node2]
java.lang.IllegalArgumentException: null
        at org.apache.cassandra.net.NoPayload$1.serialize(NoPayload.java:40)
        at org.apache.cassandra.net.NoPayload$1.serialize(NoPayload.java:36)
        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:263)
        at 
org.apache.cassandra.distributed.impl.Instance.lambda$registerInboundFilter$4(Instance.java:236)
        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.net.InboundSink.accept(InboundSink.java:44)
        at 
org.apache.cassandra.net.InboundMessageHandler$ProcessMessage.run(InboundMessageHandler.java:890)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
{code}

In a debugger I see the verb that fails is ECHO_REQ

{code}
ECHO_REQ               (31,  P0, rpcTimeout,      GOSSIP,            () -> 
NoPayload.serializer,                 () -> EchoVerbHandler.instance,           
 ECHO_RSP            ),
{code}

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

Reply via email to