[ 
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)

Reply via email to