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

Denis Mekhanikov commented on IGNITE-11914:
-------------------------------------------

It's actually a tricky question, what should be done in a situation, when 
discovery data cannot be deserialized.

I would say, that if an existing node cannot deserialize data sent from a new 
one, then the joining node should not be let into the cluster.

If we decide to always propagate such failures to the failure handler, then one 
node with some class in discovery data, which is available on that node only, 
will be able to bring down the whole cluster.

> 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
>            Priority: Major
>         Attachments: DiscoveryDataDeserializationFailureHanderTest.java
>
>
> 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)

Reply via email to