[ https://issues.apache.org/jira/browse/IGNITE-20586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17773140#comment-17773140 ]
Pavel Tupitsyn edited comment on IGNITE-20586 at 10/9/23 6:52 AM: ------------------------------------------------------------------ The problem is that we use JNI GetStringUtfChars, then treat it as true UTF-8, which it is not. A lot of details: https://stackoverflow.com/questions/32205446/getting-true-utf-8-characters-in-java-jni Potential solutions: * Reuse our binary string encoding logic, which already solves this problem. * Use GetStringChars instead, and decode UTF-16 was (Author: ptupitsyn): The problem is that we use JNI GetStringUtfChars, then treat it as true UTF-8, which it is not. A lot of details: https://stackoverflow.com/questions/32205446/getting-true-utf-8-characters-in-java-jni Potential solution: reuse our binary string encoding logic, which already solves this problem. > .NET: Node crash due to OverflowException in Callbacks.ConsoleWrite > ------------------------------------------------------------------- > > Key: IGNITE-20586 > URL: https://issues.apache.org/jira/browse/IGNITE-20586 > Project: Ignite > Issue Type: Bug > Components: platforms > Reporter: Pavel Tupitsyn > Assignee: Pavel Tupitsyn > Priority: Critical > Labels: .NET > Fix For: 2.16 > > > Log excerpt: > {code} > [06:28:44,643][SEVERE][tcp-disco-msg-worker-[f3d85cf4 10.114.158.249:47500 > crd]-#2%ignite-instance-cfa2d711-f2b7-4572-84f3-b880e25aa9e4%-#87%ignite-instance-cfa2d711-f2b7-4572-84f3-b880e25aa9e4%][TcpDiscoverySpi] > TcpDiscoverSpi's message worker thread failed abnormally. Stopping the node > in order to prevent cluster wide instability. > class org.apache.ignite.IgniteException: Arithmetic operation resulted in an > overflow. > at > org.apache.ignite.internal.processors.platform.callback.PlatformCallbackUtils.consoleWrite(Native > Method) > at > org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway.consoleWrite(PlatformCallbackGateway.java:1203) > at > org.apache.ignite.internal.processors.platform.dotnet.PlatformDotNetConsoleStream.write(PlatformDotNetConsoleStream.java:44) > at java.base/java.io.PrintStream.write(PrintStream.java:559) > at java.base/sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:233) > at > java.base/sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:312) > at > java.base/sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104) > at > java.base/java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:181) > at java.base/java.io.PrintStream.write(PrintStream.java:606) > at java.base/java.io.PrintStream.print(PrintStream.java:745) > at > org.apache.ignite.internal.util.IgniteUtils.quiet(IgniteUtils.java:4972) > at > org.apache.ignite.internal.util.IgniteUtils.quietAndWarn(IgniteUtils.java:4665) > at > org.apache.ignite.internal.processors.failure.FailureProcessor.process(FailureProcessor.java:174) > at > org.apache.ignite.internal.processors.failure.FailureProcessor.process(FailureProcessor.java:156) > at > org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance$2.apply(IgnitionEx.java:1703) > at > org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance$2.apply(IgnitionEx.java:1693) > at > org.apache.ignite.internal.worker.WorkersRegistry.onIdle(WorkersRegistry.java:232) > at > org.apache.ignite.internal.util.worker.GridWorker.onIdle(GridWorker.java:299) > at > org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.lambda$new$1(ServerImpl.java:2973) > at > org.apache.ignite.spi.discovery.tcp.ServerImpl$MessageWorker.body(ServerImpl.java:8050) > at > org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.body(ServerImpl.java:3089) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) > at > org.apache.ignite.spi.discovery.tcp.ServerImpl$MessageWorkerThread.body(ServerImpl.java:7988) > at org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:58) > {code} > *PlatformCallbackUtils.consoleWrite* calls *Callbacks.ConsoleWrite* in .NET, > and "Arithmetic operation resulted in an overflow." is from > *OverflowException*. > We must be doing something wrong with JNI string conversion. > * Add try-catch, ignore exceptions in *ConsoleWrite* callback > * Investigate whether unicode characters or long strings are handled > incorrectly > h2. Workaround > Disable Java console redirect: > {code} > IgniteConfiguration.RedirectJavaConsoleOutput = false; > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)