Author: jlowe Date: Wed Mar 12 21:57:34 2014 New Revision: 1576940 URL: http://svn.apache.org/r1576940 Log: MAPREDUCE-5778. JobSummary does not escape newlines in the job name. Contributed by Akira AJISAKA
Added: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/jobhistory/TestJobSummary.java (with props) Modified: hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobSummary.java Modified: hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt?rev=1576940&r1=1576939&r2=1576940&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt Wed Mar 12 21:57:34 2014 @@ -214,6 +214,9 @@ Release 2.4.0 - UNRELEASED MAPREDUCE-5028. Fixed a bug in MapTask that was causing mappers to fail when a large value of io.sort.mb is set. (Karthik Kambatla via vinodkv) + MAPREDUCE-5778. JobSummary does not escape newlines in the job name (Akira + AJISAKA via jlowe) + Release 2.3.1 - UNRELEASED INCOMPATIBLE CHANGES Modified: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobSummary.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobSummary.java?rev=1576940&r1=1576939&r2=1576940&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobSummary.java (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobSummary.java Wed Mar 12 21:57:34 2014 @@ -228,8 +228,10 @@ public class JobSummary { } <T> SummaryBuilder add(String key, T value) { - return _add(key, StringUtils.escapeString(String.valueOf(value), - StringUtils.ESCAPE_CHAR, charsToEscape)); + String escapedString = StringUtils.escapeString(String.valueOf(value), + StringUtils.ESCAPE_CHAR, charsToEscape).replaceAll("\n", "\\\\n") + .replaceAll("\r", "\\\\r"); + return _add(key, escapedString); } SummaryBuilder add(SummaryBuilder summary) { Added: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/jobhistory/TestJobSummary.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/jobhistory/TestJobSummary.java?rev=1576940&view=auto ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/jobhistory/TestJobSummary.java (added) +++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/jobhistory/TestJobSummary.java Wed Mar 12 21:57:34 2014 @@ -0,0 +1,68 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.mapreduce.jobhistory; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.mapreduce.v2.api.records.JobId; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class TestJobSummary { + + private static final Log LOG = LogFactory.getLog(TestJobSummary.class); + private JobSummary summary = new JobSummary(); + + @Before + public void before() { + JobId mockJobId = mock(JobId.class); + when(mockJobId.toString()).thenReturn("testJobId"); + summary.setJobId(mockJobId); + summary.setJobSubmitTime(2); + summary.setJobLaunchTime(3); + summary.setFirstMapTaskLaunchTime(4); + summary.setFirstReduceTaskLaunchTime(5); + summary.setJobFinishTime(6); + summary.setNumFinishedMaps(1); + summary.setNumFailedMaps(0); + summary.setNumFinishedReduces(1); + summary.setNumFailedReduces(0); + summary.setUser("testUser"); + summary.setQueue("testQueue"); + summary.setJobStatus("testJobStatus"); + summary.setMapSlotSeconds(7); + summary.setReduceSlotSeconds(8); + summary.setJobName("testName"); + } + + @Test + public void testEscapeJobSummary() { + // verify newlines are escaped + summary.setJobName("aa\rbb\ncc\r\ndd"); + String out = summary.getJobSummaryString(); + LOG.info("summary: " + out); + Assert.assertFalse(out.contains("\r")); + Assert.assertFalse(out.contains("\n")); + Assert.assertTrue(out.contains("aa\\rbb\\ncc\\r\\ndd")); + } +} Propchange: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/jobhistory/TestJobSummary.java ------------------------------------------------------------------------------ svn:eol-style = native