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

Adam Szita commented on PIG-5387:
---------------------------------

So as far as I understand:
 * in the testing part you are injecting an URLClassLoader if we're running 
java11. Quite hacky but not worse than the current implementation which uses 
reflection to invoke addURL on URLClassLoader;
 * in Operator class I think using readObject like this will be fine, but 
please add javadoc or comments to the readObject method that includes some 
reference to the JVM bug. We don't want ppl to remove it by mistake :)

Having this in mind [^PIG-5387_2.patch] looks good to me.

> Test failures on JRE 11
> -----------------------
>
>                 Key: PIG-5387
>                 URL: https://issues.apache.org/jira/browse/PIG-5387
>             Project: Pig
>          Issue Type: Bug
>    Affects Versions: 0.17.0
>            Reporter: Nandor Kollar
>            Assignee: Nandor Kollar
>            Priority: Major
>         Attachments: PIG-5387_1.patch, PIG-5387_2.patch
>
>
> I tried to compile Pig with JDK 8 and execute the test with Java 11, and 
> faced with several test failures. For example TestCommit#testCheckin2 failed 
> with the following exception:
> {code}
> 2019-05-08 16:06:09,712 WARN  [Thread-108] mapred.LocalJobRunner 
> (LocalJobRunner.java:run(590)) - job_local1000317333_0003
> java.lang.Exception: java.io.IOException: Deserialization error: null
>       at 
> org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:492)
>       at 
> org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:552)
> Caused by: java.io.IOException: Deserialization error: null
>       at 
> org.apache.pig.impl.util.ObjectSerializer.deserialize(ObjectSerializer.java:62)
>       at 
> org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.setup(PigGenericMapBase.java:183)
>       at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)
>       at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:799)
>       at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
>       at 
> org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:271)
>       at 
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
>       at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>       at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>       at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>       at java.base/java.lang.Thread.run(Thread.java:834)
> Caused by: java.lang.NullPointerException
>       at org.apache.pig.impl.plan.Operator.hashCode(Operator.java:106)
>       at java.base/java.util.HashMap.hash(HashMap.java:339)
>       at java.base/java.util.HashMap.readObject(HashMap.java:1461)
>       at 
> java.base/jdk.internal.reflect.GeneratedMethodAccessor12.invoke(Unknown 
> Source)
>       at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>       at 
> java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1160)
> {code}
> It deserialization of one of the map plan failed, it appears we ran into 
> [JDK-8201131|https://bugs.openjdk.java.net/browse/JDK-8201131]. I seems that 
> the workaround in the issue report works, adding a readObject method to 
> org.apache.pig.impl.plan.Operator:
> {code}
>     private void readObject(ObjectInputStream in) throws 
> ClassNotFoundException, IOException {
>         in.defaultReadObject();
>     }
> {code}
> solves the problem, however I'm not sure that this is the optimal solution.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to