ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Denis Mekhanikov (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (IGNITE-11914) Failures to deserialize discovery data should be handled by a failure handler
Date Tue, 18 Jun 2019 13:31:00 GMT

    [ 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)

Mime
View raw message