Denes Bodo created OOZIE-3304: --------------------------------- Summary: Parsing sharelib timestamps is not threadsafe Key: OOZIE-3304 URL: https://issues.apache.org/jira/browse/OOZIE-3304 Project: Oozie Issue Type: Bug Components: core Affects Versions: 4.3.1, 5.0.0b1 Reporter: Denes Bodo Assignee: Denes Bodo
In rare cases the following Exception can be read in log files when an action fails: {code:java} org.apache.oozie.action.ActionExecutorException: NumberFormatException: multiple points at org.apache.oozie.action.ActionExecutor.convertException(ActionExecutor.java:446) at org.apache.oozie.action.hadoop.JavaActionExecutor.submitLauncher(JavaActionExecutor.java:1271) at org.apache.oozie.action.hadoop.JavaActionExecutor.start(JavaActionExecutor.java:1472) at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:234) at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:65) at org.apache.oozie.command.XCommand.call(XCommand.java:287) at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:332) at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:261) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:179) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NumberFormatException: multiple points at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1890) at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.lang.Double.parseDouble(Double.java:538) at java.text.DigitList.getDouble(DigitList.java:169) at java.text.DecimalFormat.parse(DecimalFormat.java:2056) at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:2160) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1514) at java.text.DateFormat.parse(DateFormat.java:364) at org.apache.oozie.service.ShareLibService.getLatestLibPath(ShareLibService.java:727) at org.apache.oozie.service.ShareLibService.getShareLibRootPath(ShareLibService.java:595) at org.apache.oozie.action.hadoop.JavaActionExecutor.getSharelibRoot(JavaActionExecutor.java:1297) at org.apache.oozie.action.hadoop.JavaActionExecutor.initShareLibExcluder(JavaActionExecutor.java:858) at org.apache.oozie.action.hadoop.JavaActionExecutor.setLibFilesArchives(JavaActionExecutor.java:866) at org.apache.oozie.action.hadoop.JavaActionExecutor.submitLauncher(JavaActionExecutor.java:1156) ... 11 more {code} Doing a little research found https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html where the Synchronization block describes we shall use different DateFormat instances when parsing timestamps in SharelibService class. I'll try reproducing the issue in UT, for example having thousands of sharelibs. -- This message was sent by Atlassian JIRA (v7.6.3#76005)