You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Ilya Kasnacheev (Jira)" <ji...@apache.org> on 2020/06/01 15:29:00 UTC

[jira] [Commented] (IGNITE-13103) Investigate marshalling errors when changing fields of lambda's capturingClass

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

Ilya Kasnacheev commented on IGNITE-13103:
------------------------------------------

Please see attached reproducer project!  Just run ServerNodeStarter then ComputeCallerStarter's from subdirectories, the third one will fail.

> Investigate marshalling errors when changing fields of lambda's capturingClass
> ------------------------------------------------------------------------------
>
>                 Key: IGNITE-13103
>                 URL: https://issues.apache.org/jira/browse/IGNITE-13103
>             Project: Ignite
>          Issue Type: Bug
>          Components: binary, compute
>    Affects Versions: 2.8.1
>            Reporter: Ilya Kasnacheev
>            Assignee: Ilya Kasnacheev
>            Priority: Major
>         Attachments: deployer.zip
>
>
> Trying to execute static lambda whose outer type's fields changed leads to the following error:
> {code}
> Exception in thread "main" class org.apache.ignite.IgniteException: Remote job threw user exception (override or implement ComputeTask.result(..) method if you would like to have automatic failover for this exception): Failed to serialize object [typeName=org.apache.ignite.internal.processors.closure.GridClosureProcessor$C4]
> 	at org.apache.ignite.compute.ComputeTaskAdapter.result(ComputeTaskAdapter.java:102)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker$5.apply(GridTaskWorker.java:1062)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker$5.apply(GridTaskWorker.java:1055)
> 	at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:7037)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker.result(GridTaskWorker.java:1055)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker.onResponse(GridTaskWorker.java:862)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker.processDelayedResponses(GridTaskWorker.java:711)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:542)
> 	at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
> 	at org.apache.ignite.internal.processors.task.GridTaskProcessor.startTask(GridTaskProcessor.java:829)
> 	at org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:497)
> 	at org.apache.ignite.internal.processors.closure.GridClosureProcessor.runAsync(GridClosureProcessor.java:244)
> 	at org.apache.ignite.internal.processors.closure.GridClosureProcessor.runAsync(GridClosureProcessor.java:216)
> 	at org.apache.ignite.internal.IgniteComputeImpl.runAsync0(IgniteComputeImpl.java:702)
> 	at org.apache.ignite.internal.IgniteComputeImpl.run(IgniteComputeImpl.java:678)
> 	at com.gridgain.deployer.c.ComputeCallerStarter.start(ComputeCallerStarter.java:19)
> 	at com.gridgain.deployer.c.ComputeCallerStarter.main(ComputeCallerStarter.java:13)
> Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to serialize object [typeName=org.apache.ignite.internal.processors.closure.GridClosureProcessor$C4]
> 	at org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:853)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:232)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:165)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:152)
> 	at org.apache.ignite.internal.binary.GridBinaryMarshaller.marshal(GridBinaryMarshaller.java:251)
> 	at org.apache.ignite.internal.binary.BinaryMarshaller.marshal0(BinaryMarshaller.java:84)
> 	at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.marshal(AbstractNodeNameAwareMarshaller.java:57)
> 	at org.apache.ignite.internal.util.IgniteUtils.marshal(IgniteUtils.java:10386)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker.sendRequest(GridTaskWorker.java:1397)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker.processMappedJobs(GridTaskWorker.java:664)
> 	at org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:536)
> 	... 9 more
> Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to serialize object [typeName=java.lang.invoke.SerializedLambda]
> 	at org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:853)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:232)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:165)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:227)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:165)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:152)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(BinaryWriterExImpl.java:524)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.writeObject(BinaryWriterExImpl.java:1503)
> 	at org.apache.ignite.internal.processors.closure.GridClosureProcessor$C4.writeBinary(GridClosureProcessor.java:1955)
> 	at org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:767)
> 	... 19 more
> Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to write field [name=capturingClass]
> 	at org.apache.ignite.internal.binary.BinaryFieldAccessor.write(BinaryFieldAccessor.java:164)
> 	at org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:822)
> 	... 28 more
> Caused by: class org.apache.ignite.binary.BinaryObjectException: Type 'com.gridgain.deployer.c.ComputeCallerStarter' with typeId -2020111498 has a different/incorrect type for field 'c'. Expected 'int' but 'String' was provided. Field type's modification is unsupported, clean {root_path}/marshaller and {root_path}/binary_meta directories if the type change is required.
> 	at org.apache.ignite.internal.binary.BinaryUtils.mergeMetadata(BinaryUtils.java:1045)
> 	at org.apache.ignite.internal.processors.cache.binary.BinaryMetadataTransport.requestMetadataUpdate(BinaryMetadataTransport.java:182)
> 	at org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl.addMeta(CacheObjectBinaryProcessorImpl.java:548)
> 	at org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl$1.addMeta(CacheObjectBinaryProcessorImpl.java:235)
> 	at org.apache.ignite.internal.binary.BinaryContext.registerUserClassDescriptor(BinaryContext.java:837)
> 	at org.apache.ignite.internal.binary.BinaryContext.registerDescriptor(BinaryContext.java:796)
> 	at org.apache.ignite.internal.binary.BinaryContext.registerClass(BinaryContext.java:654)
> 	at org.apache.ignite.internal.binary.BinaryContext.registerClass(BinaryContext.java:629)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteClass(BinaryWriterExImpl.java:914)
> 	at org.apache.ignite.internal.binary.BinaryWriterExImpl.writeClassField(BinaryWriterExImpl.java:1004)
> 	at org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.write0(BinaryFieldAccessor.java:692)
> 	at org.apache.ignite.internal.binary.BinaryFieldAccessor.write(BinaryFieldAccessor.java:157)
> 	... 29 more
> {code}
> This is in spite to the fact that instance of outer type never sent over via network, it can be peer loaded with user versioning and deployment types as any other compute type.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)