[ https://issues.apache.org/jira/browse/OOZIE-2714?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16259420#comment-16259420 ]
Hadoop QA commented on OOZIE-2714: ---------------------------------- Testing JIRA OOZIE-2714 Cleaning local git workspace ---------------------------- {color:green}+1 PATCH_APPLIES{color} {color:green}+1 CLEAN{color} {color:red}-1 RAW_PATCH_ANALYSIS{color} . {color:green}+1{color} the patch does not introduce any @author tags . {color:green}+1{color} the patch does not introduce any tabs . {color:green}+1{color} the patch does not introduce any trailing spaces . {color:green}+1{color} the patch does not introduce any line longer than 132 . {color:red}-1{color} the patch does not add/modify any testcase {color:green}+1 RAT{color} . {color:green}+1{color} the patch does not seem to introduce new RAT warnings {color:green}+1 JAVADOC{color} . {color:green}+1{color} the patch does not seem to introduce new Javadoc warnings . {color:red}WARNING{color}: the current HEAD has 77 Javadoc warning(s) {color:green}+1 COMPILE{color} . {color:green}+1{color} HEAD compiles . {color:green}+1{color} patch compiles . {color:green}+1{color} the patch does not seem to introduce new javac warnings {color:red}-1{color} There are [2] new bugs found below threshold in total that must be fixed. . {color:green}+1{color} There are no new bugs found in [docs]. . {color:green}+1{color} There are no new bugs found in [sharelib/distcp]. . {color:green}+1{color} There are no new bugs found in [sharelib/hive]. . {color:green}+1{color} There are no new bugs found in [sharelib/spark]. . {color:green}+1{color} There are no new bugs found in [sharelib/hive2]. . {color:green}+1{color} There are no new bugs found in [sharelib/hcatalog]. . {color:green}+1{color} There are no new bugs found in [sharelib/streaming]. . {color:green}+1{color} There are no new bugs found in [sharelib/pig]. . {color:green}+1{color} There are no new bugs found in [sharelib/sqoop]. . {color:red}-1{color} There are [2] new bugs found below threshold in [sharelib/oozie] that must be fixed. . You can find the FindBugs diff here (look for the red and orange ones): sharelib/oozie/findbugs-new.html . The most important FindBugs errors are: . At ConflictDetectingClassLoader.java:[line 106]: File(...) reads a file whose location might be specified by user input . Exception is caught when Exception is not thrown in org.apache.oozie.action.hadoop.ConflictDetectingClassLoader.loadClass(String): At ConflictDetectingClassLoader.java:[line 106] . At ConflictDetectingClassLoader.java:[line 114] . {color:green}+1{color} There are no new bugs found in [examples]. . {color:green}+1{color} There are no new bugs found in [client]. . {color:green}+1{color} There are no new bugs found in [core]. . {color:green}+1{color} There are no new bugs found in [tools]. . {color:green}+1{color} There are no new bugs found in [server]. {color:green}+1 BACKWARDS_COMPATIBILITY{color} . {color:green}+1{color} the patch does not change any JPA Entity/Colum/Basic/Lob/Transient annotations . {color:green}+1{color} the patch does not modify JPA files {color:red}-1 TESTS{color} . Tests run: 1860 . Tests failed: 36 . Tests errors: 0 . The patch failed the following testcases: . testHiveAction(org.apache.oozie.action.hadoop.TestHiveActionExecutor) . testSparkAction(org.apache.oozie.action.hadoop.TestSparkActionExecutor) . testPyspark(org.apache.oozie.action.hadoop.TestPyspark) . testHive2Action(org.apache.oozie.action.hadoop.TestHive2ActionExecutor) . testHive2ActionFails(org.apache.oozie.action.hadoop.TestHive2ActionExecutor) . testMapReduceWithUberJarEnabled(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testSetMapredJobName(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testEndWithoutConfiguration(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testMapReduceWithConfigClass(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testMapReduceWithCredentials(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testJobNameSetForMapReduceChild(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testStreamingConfOverride(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testMapReduceWithConfigClassThrowException(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testStreaming(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testSetExecutionStats_when_user_has_specified_stats_write_TRUE(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testSetExecutionStats_when_user_has_specified_stats_write_FALSE(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testMapReduceWithConfigClassNotFound(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testMapReduce(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testMapReduceActionError(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testMapReduceActionKill(org.apache.oozie.action.hadoop.TestMapReduceActionExecutor) . testPig(org.apache.oozie.action.hadoop.TestPigActionExecutor) . testExecutionStatsWithMaxStatsSizeLimit(org.apache.oozie.action.hadoop.TestPigActionExecutor) . testPigError(org.apache.oozie.action.hadoop.TestPigActionExecutor) . testExecutionStatsWithRetrieveStatsFalse(org.apache.oozie.action.hadoop.TestPigActionExecutor) . testExternalChildIds(org.apache.oozie.action.hadoop.TestPigActionExecutor) . testExecutionStats(org.apache.oozie.action.hadoop.TestPigActionExecutor) . testUdfPig(org.apache.oozie.action.hadoop.TestPigActionExecutor) . testSqoopActionWithRedundantArgsAndFreeFormQuery(org.apache.oozie.action.hadoop.TestSqoopActionExecutor) . testSqoopActionWithArgsAndFreeFormQuery(org.apache.oozie.action.hadoop.TestSqoopActionExecutor) . testSqoopActionWithBadRedundantArgsAndFreeFormQuery(org.apache.oozie.action.hadoop.TestSqoopActionExecutor) . testSqoopActionWithBadCommand(org.apache.oozie.action.hadoop.TestSqoopActionExecutor) . testSqoopEval(org.apache.oozie.action.hadoop.TestSqoopActionExecutor) . testSqoopActionWithRedundantPrefix(org.apache.oozie.action.hadoop.TestSqoopActionExecutor) . testSqoopAction(org.apache.oozie.action.hadoop.TestSqoopActionExecutor) . testParallelFsAndShellWorkflowCompletesSuccessfully(org.apache.oozie.test.TestWorkflowRetries) . testParallelFsAndShellWorkflowCompletesSuccessfully(org.apache.oozie.test.TestWorkflow) . Tests failing with errors: . {color:green}+1 DISTRO{color} . {color:green}+1{color} distro tarball builds with the patch ---------------------------- {color:red}*-1 Overall result, please check the reported -1(s)*{color} {color:red}. There is at least one warning, please check{color} The full output of the test-patch run is available at . https://builds.apache.org/job/PreCommit-OOZIE-Build/245/ > Detect conflicting resources during class loading > ------------------------------------------------- > > Key: OOZIE-2714 > URL: https://issues.apache.org/jira/browse/OOZIE-2714 > Project: Oozie > Issue Type: New Feature > Components: core > Reporter: Peter Bacsko > Assignee: Peter Bacsko > Attachments: ClassLoaderTest.java, OOZIE-2714-POC01.patch, > OOZIE-2714-POC02.patch > > > There are a bunch of issues in Oozie which are related to class loading. > The main problem is that the classpath is constructed in a way which is very > specific to Oozie: > - Hadoop lib jars > - Sharelib jars > - User-defined jars > Sometimes there is a conflict between sharelib and hadoop lib version. Also, > users can add their own jars which sometimes contain a different version of > popular libraries such as Guava, Apache commons, etc. > We should be able to detect these conflicts and print exact error message so > that Oozie users can take appropriate actions to resolve the problem. > A possible approach is the following: > * start the execution of an action on a different thread > * replace the thread's context classloader with a classloader which can > detect conflicts > * when the JVM invokes the {{loadClass()}} method of the classloader, it > scans through the jars (which are available as {{URLClassPath}} objects). If > it finds the given resource in at least two jars, it can do different things > depending on the setup: > ** throws an error immediately, mentioning the conflicting jars (this is > probably too strict - but still an option) > ** loads the two resource into a byte array and compares them - it only > throws an error if there is difference > ** compares the jars but only emits an error message if there is a conflict > ** something else (user defined action?) > Implementing such a classloader is not difficult and would greatly enhance > the supportability of Oozie. It could work in multiple modes depending on the > setup - perhaps being able to control it from a workflow config is desirable. > If there's any problem, we should be able to turn it off completely, too. -- This message was sent by Atlassian JIRA (v6.4.14#64029)