[ https://issues.apache.org/jira/browse/MAPREDUCE-6542?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15033760#comment-15033760 ]
zhangyubiao commented on MAPREDUCE-6542: ---------------------------------------- Thanks a lot for [~templedf]'s guide. {code} @Test //Multithreaded Test GetFormattedTimeWithDiff() public void testGetFormattedTimeWithDiff() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(16); final CyclicBarrier cyclicBarrier = new CyclicBarrier(10); for (int i = 0; i < 10; i++) { executorService.execute(new Runnable() { @Override public void run() { try { cyclicBarrier.await(); } catch (InterruptedException e) { assertEquals("cyclicBarrier InterruptedException", e.getMessage()); } catch (BrokenBarrierException e) { assertEquals("cyclicBarrier BrokenBarrierException", e.getMessage()); } final long end = System.currentTimeMillis(); final long start = end - 30000; String formattedTime1 = StringUtils.getFormattedTimeWithDiff(fastDateFormat, start, end); String formattedTime2 = StringUtils.getFormattedTimeWithDiff(fastDateFormat, start, end); assertTrue("Method returned inconsistent results indicative of a race condition", formattedTime1.equals(formattedTime2)); } }); } executorService.shutdown(); } {code} Is it OK for the test unit ? And I find StringUtils.java:413: Line is longer than 80 characters (found 82). Should I fix this ? > HistoryViewer use SimpleDateFormat,But SimpleDateFormat is not threadsafe > ------------------------------------------------------------------------- > > Key: MAPREDUCE-6542 > URL: https://issues.apache.org/jira/browse/MAPREDUCE-6542 > Project: Hadoop Map/Reduce > Issue Type: Bug > Components: jobhistoryserver > Affects Versions: 2.2.0, 2.7.1 > Environment: CentOS6.5 Hadoop > Reporter: zhangyubiao > Assignee: zhangyubiao > Attachments: MAPREDUCE-6542-v2.patch, MAPREDUCE-6542-v3.patch, > MAPREDUCE-6542-v4.patch, MAPREDUCE-6542-v5.patch, MAPREDUCE-6542-v6.patch, > MAPREDUCE-6542.patch > > > I use SimpleDateFormat to Parse the JobHistory File before > {code} > private static final SimpleDateFormat dateFormat = > new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); > public static String getJobDetail(JobInfo job) { > StringBuffer jobDetails = new StringBuffer(""); > SummarizedJob ts = new SummarizedJob(job); > jobDetails.append(job.getJobId().toString().trim()).append("\t"); > jobDetails.append(job.getUsername()).append("\t"); > jobDetails.append(job.getJobname().replaceAll("\\n", > "")).append("\t"); > jobDetails.append(job.getJobQueueName()).append("\t"); > jobDetails.append(job.getPriority()).append("\t"); > jobDetails.append(job.getJobConfPath()).append("\t"); > jobDetails.append(job.getUberized()).append("\t"); > > jobDetails.append(dateFormat.format(job.getSubmitTime())).append("\t"); > > jobDetails.append(dateFormat.format(job.getLaunchTime())).append("\t"); > > jobDetails.append(dateFormat.format(job.getFinishTime())).append("\t"); > return jobDetails.toString(); > } > {code} > But I find I query the SubmitTime and LaunchTime in hive and compare > JobHistory File time , I find that the submitTime and launchTime was wrong. > Finally,I change to use the FastDateFormat to parse the time format and the > time become right -- This message was sent by Atlassian JIRA (v6.3.4#6332)