[
https://issues.apache.org/jira/browse/CASSANDRA-16267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17231091#comment-17231091
]
Yongle Zhang commented on CASSANDRA-16267:
------------------------------------------
Thanks!
> Adding a C* 1.2.0 node to a C* 1.1.0 cluster fails with connection failure
> --------------------------------------------------------------------------
>
> Key: CASSANDRA-16267
> URL: https://issues.apache.org/jira/browse/CASSANDRA-16267
> Project: Cassandra
> Issue Type: Bug
> Reporter: Yongle Zhang
> Priority: Normal
>
> Steps to reproduce:
> # start a 2-node C* 1.1.0 cluster
> # add a new C* 1.2.0 node
> Error:
> {code:java}
> ERROR [main] 2020-06-18 01:12:12,894 CassandraDaemon.java (line 414)
> Exception encountered during startup
> java.lang.RuntimeException: No other nodes seen! Unable to bootstrap.If you
> intended to start a single-node cluster, you should make sure your
> broadcast_address (or listen_address) is listed as a seed. Otherwise, you
> need to determine why the seed being contacted has no knowledge of the rest
> of the cluster. Usually, this can be solved by giving all nodes the same
> seed list.
> at
> org.apache.cassandra.dht.BootStrapper.getBootstrapSource(BootStrapper.java:154)
> at
> org.apache.cassandra.dht.BootStrapper.getBalancedToken(BootStrapper.java:135)
> at
> org.apache.cassandra.dht.BootStrapper.getBootstrapTokens(BootStrapper.java:115)
> at
> org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:611)
> at
> org.apache.cassandra.service.StorageService.initServer(StorageService.java:499)
> at
> org.apache.cassandra.service.StorageService.initServer(StorageService.java:397)
> at
> org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:309)
> at
> org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:397)
> at
> org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:440)
> ERROR [StorageServiceShutdownHook] 2020-06-18 01:12:12,898
> CassandraDaemon.java (line 133) Exception in thread
> Thread[StorageServiceShutdownHook,5,main]
> java.lang.NullPointerException
> at
> org.apache.cassandra.service.StorageService.stopRPCServer(StorageService.java:307)
> at
> org.apache.cassandra.service.StorageService$1.runMayThrow(StorageService.java:464)
> at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)
> at java.lang.Thread.run(Thread.java:748)
> {code}
> Root cause:
> In 1.2.0, when a node wants to connect another node, it will expect to read a
> int from it. See
> https://github.com/apache/cassandra/blob/cassandra-1.2.0/src/java/org/apache/cassandra/net/OutboundTcpConnection.java#L276
> .
> There *seems* to exist a check (line 269 in the same file) about the target
> version before trying to read int. It is based on variable `targetVersion`,
> which is from
> `MessagingService.instance().getVersion(poolReference.endPoint())`. This
> function, however, returns the version of itself when the end point is
> unknown.
> Also the target node will send this int if it is also running 1.2.0. See
> https://github.com/apache/cassandra/blob/cassandra-1.2.0/src/java/org/apache/cassandra/net/IncomingTcpConnection.java#L90
> .
> However, in 1.1.0, there is no such mechanism, the 1.1.0 node won't send this
> int. So when a 1.2.0 node tries to connect to a 1.1.0 node, it will stuck at
> "readInt".
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]