MAPREDUCE-6693. ArrayIndexOutOfBoundsException occurs when the length of the job name is equal to mapreduce.jobhistory.jobname.limit. Contributed by Ajith S.

(cherry picked from commit b3579305268bffc44a8041c5b75f15f01ebb9ce4)
(cherry picked from commit 19db965c2776e86095ecd31d7e582aca07d1e789)
This commit is contained in:
Akira Ajisaka 2016-05-17 20:19:01 +09:00
parent 388b2010ae
commit fc221ecf3d
2 changed files with 26 additions and 1 deletions

View File

@ -311,7 +311,7 @@ private static String trimURLEncodedString(
String encodedString, int limitLength) {
assert(limitLength >= 0) : "limitLength should be positive integer";
if (encodedString.length() < limitLength) {
if (encodedString.length() <= limitLength) {
return encodedString;
}

View File

@ -481,4 +481,29 @@ public void testJobHistoryFileNameBackwardsCompatible() throws IOException {
Assert.assertNull("Queue name incorrect after decoding old history file",
info.getQueueName());
}
@Test
public void testTrimJobNameEqualsLimitLength() throws IOException {
int jobNameTrimLength = 9;
JobIndexInfo info = new JobIndexInfo();
JobID oldJobId = JobID.forName(JOB_ID);
JobId jobId = TypeConverter.toYarn(oldJobId);
info.setJobId(jobId);
info.setSubmitTime(Long.parseLong(SUBMIT_TIME));
info.setUser(USER_NAME);
info.setJobName(JOB_NAME);
info.setFinishTime(Long.parseLong(FINISH_TIME));
info.setNumMaps(Integer.parseInt(NUM_MAPS));
info.setNumReduces(Integer.parseInt(NUM_REDUCES));
info.setJobStatus(JOB_STATUS);
info.setQueueName(QUEUE_NAME);
info.setJobStartTime(Long.parseLong(JOB_START_TIME));
String jobHistoryFile = FileNameIndexUtils.getDoneFileName(info,
jobNameTrimLength);
JobIndexInfo parsedInfo = FileNameIndexUtils.getIndexInfo(jobHistoryFile);
Assert.assertEquals("Job name did not get trimmed correctly", info
.getJobName().substring(0, jobNameTrimLength), parsedInfo.getJobName());
}
}