[
https://issues.apache.org/jira/browse/IGNITE-13103?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17127936#comment-17127936
]
Sergey Chugunov commented on IGNITE-13103:
------------------------------------------
[~ilyak],
Change looks good to me, I think in general we shouldn't register metadata
implicitly, only by explicit call.
> 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
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> 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)