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)

Reply via email to