[ https://issues.apache.org/jira/browse/IGNITE-1717?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14969329#comment-14969329 ]
Andrey Gura commented on IGNITE-1717: ------------------------------------- {{PortableMarshaller}} can throw {{StackOverflowException}} in case of {{writeReplace}} method returns {{this}}. Need to disable repeatable object replacing in case of replaced object has the same class as original object. This behavior is similar to {{ObjectOutputStream.writeObject0()}} method and therefore doesn't safe from cases with cyclic object replacing (A -> replaced by B -> replaced by A -> etc) PR updated. Waiting for TC. > NPE during running ScalarCreditRiskExample with portableMarshaller > ------------------------------------------------------------------ > > Key: IGNITE-1717 > URL: https://issues.apache.org/jira/browse/IGNITE-1717 > Project: Ignite > Issue Type: Bug > Components: general > Affects Versions: 1.5 > Environment: Ubuntu 14.04, community 1.5.0 build #319 > Reporter: Vasilisa Sidorova > Fix For: 1.5 > > > --------------------------------------------- > DESCRIPTION > --------------------------------------------- > When default optimizedMarshaller is changed into portableMarshaller in > example-ignite.xml then ScalarCreditRiskExample is failed with NPE > --------------------------------------------- > STEPS FOR REPRODUCE > --------------------------------------------- > 1. Build examples project in IDE > 2.In the example-ignite.xml change property from: > {noformat} > <property name="marshaller"> > <bean > class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller"> --> > <!-- Set to false to allow non-serializable objects in > examples, default is true. --> > <!-- <property name="requireSerializable" value="false"/> > </bean> > </property> > {noformat} > to > {noformat} > <property name="marshaller"> > <bean class=" > org.apache.ignite.internal.portable.api.PortableMarshaller"/> > </property> > {noformat} > 3. Run ExampleNodeStartup > 4. Run ScalarCreditRiskExample > --------------------------------------------- > ACTUAL RESULT > --------------------------------------------- > Example is failed with exception: > {noformat} > [13:57:40,936][ERROR][ignite-#18%sys-null%][GridTaskWorker] Failed to obtain > remote job result policy for result from ComputeTask.result(..) method (will > fail the whole task): GridJobResultImpl [job=C2 [], sib=GridJobSiblingImpl > [sesId=5274c407051-955a7d7a-3558-446d-842f-ca760c8e8b02, > jobId=8274c407051-a6a70d16-43e2-4c1a-b741-19c83132a1c8, > nodeId=a6a70d16-43e2-4c1a-b741-19c83132a1c8, isJobDone=false], > jobCtx=GridJobContextImpl > [jobId=8274c407051-a6a70d16-43e2-4c1a-b741-19c83132a1c8, timeoutObj=null, > attrs={}], node=TcpDiscoveryNode [id=a6a70d16-43e2-4c1a-b741-19c83132a1c8, > addrs=[0:0:0:0:0:0:0:1%1, 10.0.0.7, 127.0.0.1, 192.168.1.179], > sockAddrs=[/10.0.0.7:47500, /0:0:0:0:0:0:0:1%1:47500, /192.168.1.179:47500, > /10.0.0.7:47500, /127.0.0.1:47500, /192.168.1.179:47500], discPort=47500, > order=1, intOrder=1, lastExchangeTime=1444993059563, loc=false, > ver=1.5.0#20151012-sha1:6844370d, isClient=false], ex=class > o.a.i.IgniteException: null, hasRes=true, isCancelled=false, isOccupied=true] > 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). > at > org.apache.ignite.compute.ComputeTaskAdapter.result(ComputeTaskAdapter.java:101) > at > org.apache.ignite.internal.processors.closure.GridClosureProcessor$T3.result(GridClosureProcessor.java:1246) > at > org.apache.ignite.internal.processors.task.GridTaskWorker$3.apply(GridTaskWorker.java:903) > at > org.apache.ignite.internal.processors.task.GridTaskWorker$3.apply(GridTaskWorker.java:896) > at > org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6403) > at > org.apache.ignite.internal.processors.task.GridTaskWorker.result(GridTaskWorker.java:896) > at > org.apache.ignite.internal.processors.task.GridTaskWorker.onResponse(GridTaskWorker.java:792) > at > org.apache.ignite.internal.processors.task.GridTaskProcessor.processJobExecuteResponse(GridTaskProcessor.java:995) > at > org.apache.ignite.internal.processors.task.GridTaskProcessor$JobMessageListener.onMessage(GridTaskProcessor.java:1219) > at > org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:811) > at > org.apache.ignite.internal.managers.communication.GridIoManager.access$1500(GridIoManager.java:106) > at > org.apache.ignite.internal.managers.communication.GridIoManager$5.run(GridIoManager.java:774) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627) > at java.lang.Thread.run(Thread.java:809) > Caused by: class org.apache.ignite.IgniteException: null > at > org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.execute(GridClosureProcessor.java:1792) > at > org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:509) > at > org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6371) > at > org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:503) > at > org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:456) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) > at > org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1166) > at > org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1776) > ... 6 more > Caused by: java.lang.NullPointerException > at > org.apache.ignite.scalar.examples.CreditRiskManager.calculateCreditRiskMonteCarlo(ScalarCreditRiskExample.scala:163) > at > org.apache.ignite.scalar.examples.ScalarCreditRiskExample$$anonfun$org$apache$ignite$scalar$examples$ScalarCreditRiskExample$$closures$1$$anonfun$apply$mcVI$sp$1.apply$mcD$sp(ScalarCreditRiskExample.scala:99) > at > org.apache.ignite.scalar.examples.ScalarCreditRiskExample$$anonfun$org$apache$ignite$scalar$examples$ScalarCreditRiskExample$$closures$1$$anonfun$apply$mcVI$sp$1.apply(ScalarCreditRiskExample.scala:99) > at > org.apache.ignite.scalar.examples.ScalarCreditRiskExample$$anonfun$org$apache$ignite$scalar$examples$ScalarCreditRiskExample$$closures$1$$anonfun$apply$mcVI$sp$1.apply(ScalarCreditRiskExample.scala:99) > at > org.apache.ignite.scalar.lang.ScalarOutClosure.call(ScalarOutClosure.scala:45) > at > org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.execute(GridClosureProcessor.java:1789) > ... 13 more > >>> Finished calculating portfolio risk [risk=578073.772516016, time=4440ms] > [13:57:45] Ignite node stopped OK [uptime=00:00:04:666] > {noformat} > --------------------------------------------- > EXPECTED RESULT > --------------------------------------------- > Example is passed without any exceptions -- This message was sent by Atlassian JIRA (v6.3.4#6332)