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

This commit is contained in:
Akira Ajisaka 2016-05-17 20:19:01 +09:00
parent 9fe5828f05
commit b357930526
2 changed files with 26 additions and 1 deletions

View File

@ -311,7 +311,7 @@ public class FileNameIndexUtils {
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 class TestFileNameIndexUtils {
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());
}
}