You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Anton Kalashnikov (JIRA)" <ji...@apache.org> on 2019/07/01 09:03:00 UTC

[jira] [Commented] (IGNITE-11914) Failures to deserialize discovery data should be handled by a failure handler

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

Anton Kalashnikov commented on IGNITE-11914:
--------------------------------------------

[~ibessonov], In generall your changes looks good for me. But I have one proposal: maybe it better to avoid boolean flag(panic mark) on public api and instead  use two methods such as "umarshalData" and "unmarshalDataIfPossible"(name of methods can be changed it just the example)

> Failures to deserialize discovery data should be handled by a failure handler
> -----------------------------------------------------------------------------
>
>                 Key: IGNITE-11914
>                 URL: https://issues.apache.org/jira/browse/IGNITE-11914
>             Project: Ignite
>          Issue Type: Bug
>    Affects Versions: 2.7.5
>            Reporter: Denis Mekhanikov
>            Assignee: Ivan Bessonov
>            Priority: Major
>             Fix For: 2.8
>
>         Attachments: DiscoveryDataDeserializationFailureHanderTest.java
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> When a node during join receives a discovery data packet, that it cannot deserialize, then this error is printed to log and not handled in any way. It leads to swallowing potentially important failures.
> For example, a failure to deserialize a continuous query remote filter should be propagated to a failure handler, but it doesn't happen. Test is attached.
> Error message:
> {noformat}
> Failed to unmarshal discovery data for component: 0
> class org.apache.ignite.IgniteCheckedException: 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=org.apache.ignite.tests.p2p.CacheDeploymentEntryEventFilterFactory]
> 	at org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal0(JdkMarshaller.java:146)
> 	at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:93)
> 	at org.apache.ignite.internal.util.IgniteUtils.unmarshalZip(IgniteUtils.java:10068)
> 	at org.apache.ignite.spi.discovery.tcp.internal.DiscoveryDataPacket.unmarshalData(DiscoveryDataPacket.java:292)
> 	at org.apache.ignite.spi.discovery.tcp.internal.DiscoveryDataPacket.unmarshalGridData(DiscoveryDataPacket.java:154)
> 	at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.onExchange(TcpDiscoverySpi.java:2065)
> 	at org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processNodeAddFinishedMessage(ServerImpl.java:4882)
> 	at org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processMessage(ServerImpl.java:2964)
> 	at org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processMessage(ServerImpl.java:2696)
> 	at org.apache.ignite.spi.discovery.tcp.ServerImpl$MessageWorker.body(ServerImpl.java:7527)
> 	at org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.body(ServerImpl.java:2818)
> 	at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
> 	at org.apache.ignite.spi.discovery.tcp.ServerImpl$MessageWorkerThread.body(ServerImpl.java:7458)
> 	at org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:61)
> Caused by: java.lang.ClassNotFoundException: org.apache.ignite.tests.p2p.CacheDeploymentEntryEventFilterFactory
> 	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> 	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> 	at java.lang.Class.forName0(Native Method)
> 	at java.lang.Class.forName(Class.java:348)
> 	at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8672)
> 	at org.apache.ignite.marshaller.jdk.JdkMarshallerObjectInputStream.resolveClass(JdkMarshallerObjectInputStream.java:59)
> 	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1863)
> 	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1746)
> 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2037)
> 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1568)
> 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:428)
> 	at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandlerV2.readExternal(CacheContinuousQueryHandlerV2.java:179)
> 	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2113)
> 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2062)
> 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1568)
> 	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2282)
> 	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2206)
> 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2064)
> 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1568)
> 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:428)
> 	at java.util.HashMap.readObject(HashMap.java:1409)
> 	at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:498)
> 	at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
> 	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2173)
> 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2064)
> 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1568)
> 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:428)
> 	at org.apache.ignite.internal.util.IgniteUtils.readMap(IgniteUtils.java:5316)
> 	at org.apache.ignite.internal.processors.continuous.GridContinuousProcessor$DiscoveryData.readExternal(GridContinuousProcessor.java:2317)
> 	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2113)
> 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2062)
> 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1568)
> 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:428)
> 	at org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal0(JdkMarshaller.java:141)
> 	... 13 more
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)