[ https://issues.apache.org/jira/browse/IGNITE-15256?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17395313#comment-17395313 ]
Ivan Fedorenkov commented on IGNITE-15256: ------------------------------------------ [~ivan.glukos] [~irakov] could you please review? > ClassNotFoundException on attempt to invoke service method from Java > ThinClient after cluster failover > ------------------------------------------------------------------------------------------------------ > > Key: IGNITE-15256 > URL: https://issues.apache.org/jira/browse/IGNITE-15256 > Project: Ignite > Issue Type: Bug > Components: thin client > Affects Versions: 2.10 > Reporter: Ivan Fedorenkov > Assignee: Ivan Fedorenkov > Priority: Major > Fix For: 2.12 > > Time Spent: 10m > Remaining Estimate: 0h > > Say, we have a thin client that uses some ignite service. This service > exposes a method with an Externalizable input parameter. If cluster fails > over after some period of successful interactions between the cluster and the > client the following exception could be observed in cluster logs: > {code:java} > [2021-08-04 > 23:22:44,695][ERROR][client-connector-#114%client.ReliabilityTest%][ClientListenerNioListener] > Failed to parse client request. > class org.apache.ignite.binary.BinaryObjectException: Failed to unmarshal > object with optimized marshaller > at > org.apache.ignite.internal.binary.BinaryUtils.doReadOptimized(BinaryUtils.java:1819) > at > org.apache.ignite.internal.binary.BinaryUtils.unmarshal(BinaryUtils.java:2034) > at > org.apache.ignite.internal.binary.BinaryReaderExImpl.readObjectDetached(BinaryReaderExImpl.java:1341) > at > org.apache.ignite.internal.binary.BinaryReaderExImpl.readObjectDetached(BinaryReaderExImpl.java:1336) > at > org.apache.ignite.internal.processors.platform.client.service.ClientServiceInvokeRequest.<init>(ClientServiceInvokeRequest.java:126) > at > org.apache.ignite.internal.processors.platform.client.ClientMessageParser.decode(ClientMessageParser.java:486) > at > org.apache.ignite.internal.processors.platform.client.ClientMessageParser.decode(ClientMessageParser.java:311) > at > org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:164) > at > org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:55) > at > org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) > at > org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) > at > org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) > at > org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70) > 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) > Caused by: class > org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerInaccessibleClassException: > Failed to find class with given class loader for unmarshalling (make sure > same versions of all classes are available on all nodes or enable > peer-class-loading) [clsLdr=sun.misc.Launcher$AppClassLoader@18b4aac2, > cls=Failed to resolve class name [platformId=0, platform=Java, > typeId=-771474336]] > at > org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller.unmarshal0(OptimizedMarshaller.java:257) > at > org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller.unmarshal0(OptimizedMarshaller.java:225) > at > org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:92) > at > org.apache.ignite.internal.binary.BinaryUtils.doReadOptimized(BinaryUtils.java:1816) > ... 16 more > Caused by: java.lang.ClassNotFoundException: Failed to resolve class name > [platformId=0, platform=Java, typeId=-771474336] > at > org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:459) > at > org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:384) > at > org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:371) > at > org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.descriptorFromCache(OptimizedMarshallerUtils.java:329) > at > org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.classDescriptor(OptimizedMarshallerUtils.java:274) > at > org.apache.ignite.internal.marshaller.optimized.OptimizedObjectInputStream.readObject0(OptimizedObjectInputStream.java:348) > at > org.apache.ignite.internal.marshaller.optimized.OptimizedObjectInputStream.readObjectOverride(OptimizedObjectInputStream.java:205) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:494) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:461) > at > org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller.unmarshal0(OptimizedMarshaller.java:251) > ... 19 more > [2021-08-04 23:22:44,698][WARN > ][grid-nio-worker-client-listener-0-#90%client.ReliabilityTest%][ClientListenerProcessor] > Failed to shutdown socket: null > java.nio.channels.ClosedChannelException > at > sun.nio.ch.SocketChannelImpl.shutdownOutput(SocketChannelImpl.java:796) > at sun.nio.ch.SocketAdaptor.shutdownOutput(SocketAdaptor.java:423) > at > org.apache.ignite.internal.util.IgniteUtils.close(IgniteUtils.java:4234) > at > org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.closeKey(GridNioServer.java:2784) > at > org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.close(GridNioServer.java:2835) > at > org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.close(GridNioServer.java:2794) > at > org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.bodyInternal(GridNioServer.java:2157) > at > org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.body(GridNioServer.java:1910) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) > at java.lang.Thread.run(Thread.java:748) {code} > Root cause: client believes that it has registered the type within the > cluster, but cluster can loose this information after failover if its working > directory gets erased. -- This message was sent by Atlassian Jira (v8.3.4#803005)