[
https://issues.apache.org/jira/browse/CASSANDRA-16269?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Brandon Williams updated CASSANDRA-16269:
-----------------------------------------
Resolution: Won't Fix
Status: Resolved (was: Triage Needed)
These versions are ancient.
> Stress testing a mixed cluster with C* 1.2.0 (seed) and 1.1.0 fails with
> NumberFormatException
> ----------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-16269
> URL: https://issues.apache.org/jira/browse/CASSANDRA-16269
> Project: Cassandra
> Issue Type: Bug
> Reporter: Yongle Zhang
> Priority: Normal
>
> Steps to reproduce:
> # Set up a mixed 1.1.0 & 1.2.0 cluster with 2 nodes (1 seed, 1.2.0 node
> being the seed).
> # Run the stress testing tool, e.g., `/cassandra/tools/bin/stress -d
> 250.16.238.1,250.16.238.2 -r`, wait for finish.
> Error log:
> {code:java}
> DEBUG [WRITE-/250.16.238.1] 2020-06-18 01:55:09,606
> OutboundTcpConnection.java (line 229) attempting to connect to /250.16.238.1
> DEBUG [InternalResponseStage:1] 2020-06-18 01:55:09,613
> ResponseVerbHandler.java (line 44) Processing response on a callback from
> 122@/250.16.238.1
> ERROR [InternalResponseStage:1] 2020-06-18 01:55:09,615
> AbstractCassandraDaemon.java (line 134) Exception in thread
> Thread[InternalResponseStage:1,5,main]
> java.lang.NumberFormatException: For input string: "'115"
> at
> java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
> at java.lang.Integer.parseInt(Integer.java:569)
> at java.math.BigInteger.<init>(BigInteger.java:470)
> at java.math.BigInteger.<init>(BigInteger.java:606)
> at
> org.apache.cassandra.dht.RandomPartitioner$1.fromString(RandomPartitioner.java:136)
> at
> org.apache.cassandra.dht.BootStrapper$BootstrapTokenCallback.response(BootStrapper.java:213)
> at
> org.apache.cassandra.net.ResponseVerbHandler.doVerb(ResponseVerbHandler.java:45)
> at
> org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:59)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> DEBUG [InternalResponseStage:2] 2020-06-18 01:55:39,610
> ResponseVerbHandler.java (line 44) Processing response on a callback from
> 262@/250.16.238.1
> ERROR [InternalResponseStage:2] 2020-06-18 01:55:39,611
> AbstractCassandraDaemon.java (line 134) Exception in thread
> Thread[InternalResponseStage:2,5,main]
> java.lang.NumberFormatException: For input string: "^@'115"
> at
> java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
> at java.lang.Integer.parseInt(Integer.java:569)
> at java.math.BigInteger.<init>(BigInteger.java:470)
> at java.math.BigInteger.<init>(BigInteger.java:606)
> at
> org.apache.cassandra.dht.RandomPartitioner$1.fromString(RandomPartitioner.java:136)
> at
> org.apache.cassandra.dht.BootStrapper$BootstrapTokenCallback.response(BootStrapper.java:213)
> at
> org.apache.cassandra.net.ResponseVerbHandler.doVerb(ResponseVerbHandler.java:45)
> at
> org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:59)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)ERROR [main] 2020-06-18
> 01:57:39,614 AbstractCassandraDaemon.java (line 370) Exception encountered
> during startup
> java.lang.RuntimeException: Bootstrap failed, could not obtain token from:
> /250.16.238.1
> at
> org.apache.cassandra.dht.BootStrapper.getBootstrapTokenFrom(BootStrapper.java:177)
> at
> org.apache.cassandra.dht.BootStrapper.getBalancedToken(BootStrapper.java:110)
> at
> org.apache.cassandra.dht.BootStrapper.getBootstrapToken(BootStrapper.java:104)
> at
> org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:599)
> at
> org.apache.cassandra.service.StorageService.initServer(StorageService.java:515)
> at
> org.apache.cassandra.service.StorageService.initServer(StorageService.java:407)
> at
> org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:231)
> at
> org.apache.cassandra.service.AbstractCassandraDaemon.activate(AbstractCassandraDaemon.java:353)
> at
> org.apache.cassandra.thrift.CassandraDaemon.main(CassandraDaemon.java:106)
> ERROR [main] 2020-06-18 01:58:13,206 AbstractCassandraDaemon.java (line 370)
> 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:127)
> at
> org.apache.cassandra.dht.BootStrapper.getBalancedToken(BootStrapper.java:109)
> at
> org.apache.cassandra.dht.BootStrapper.getBootstrapToken(BootStrapper.java:104)
> at
> org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:599)
> at
> org.apache.cassandra.service.StorageService.initServer(StorageService.java:515)
> at
> org.apache.cassandra.service.StorageService.initServer(StorageService.java:407)
> at
> org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:231)
> at
> org.apache.cassandra.service.AbstractCassandraDaemon.activate(AbstractCassandraDaemon.java:353)
> at
> org.apache.cassandra.thrift.CassandraDaemon.main(CassandraDaemon.java:106)
> INFO [StorageServiceShutdownHook] 2020-06-18 01:58:13,213
> MessagingService.java (line 539) Waiting for messaging service to quiesce
> INFO [ACCEPT-/250.16.238.3] 2020-06-18 01:58:13,215 MessagingService.java
> (line 695) MessagingService shutting down server thread.
> DEBUG [GossipTasks:1] 2020-06-18 01:58:13,244
> DebuggableThreadPoolExecutor.java (line 167) Task cancelled
> java.util.concurrent.CancellationException
> at java.util.concurrent.FutureTask.report(FutureTask.java:121)
> at java.util.concurrent.FutureTask.get(FutureTask.java:192)
> at
> org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor.extractThrowable(DebuggableThreadPoolExecutor.java:159)
> at
> org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor.logExceptionsAfterExecute(DebuggableThreadPoolExecutor.java:123)
> at
> org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor.afterExecute(DebuggableScheduledThreadPoolExecutor.java:50)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> {code}
> Root cause analysis:
> In 1.2.0, when a `MessageOut<T>` class, where `T` is the type of its payload,
> is serialized, it will first write the logical header part of it (which is
> compatible with 1.1.0), and then write a int to indicate the length of its
> payload, and then serialize its payload. When `T` is `String`, it will call
> `DataOutput.writeUTF`, which will write a short to indicate the length of the
> string.
> In 1.1.0, the incoming byte stream will be serialized as `Message` class,
> which will first serialize the header part, and then read a int as the length
> of the following payload, and then read the following raw bytes as its
> payload. The problem is that the payload will then be directly encoded as a
> UTF string, so *the short will be considered as part of the string*. For
> example, this log shows:
> {code:java}
> WARN [InternalResponseStage:3] 2020-07-10 08:14:08,903 RandomPartitioner.java
> (line 145) Token.TokenFactory<BigInteger>.fromString: string =
> �'163345392646151285100494393711260197750, bytes = 0 39 49 54 51 51 52 53 51
> 57 50 54 52 54 49 53 49 50 56 53 49 48 48 52 57 52 51 57 51 55 49 49 50 54 48
> 49 57 55 55 53 48
> {code}
> The first two byte 0 39 is the big endian short representation of number 39,
> which is exactly the length of the following string. These two bytes can’t be
> parsed as a number, so that a NumberFormatException happens.
>
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]