Merge r1612565 from trunk: YARN-2242. Addendum patch. Improve exception information on AM launch crashes. (Contributed by Li Lu)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1612566 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Junping Du 2014-07-22 13:11:51 +00:00
parent d0b9bf11ab
commit 1ad0a08c20
2 changed files with 27 additions and 10 deletions

View File

@ -1294,12 +1294,20 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable {
private String getAMContainerCrashedDiagnostics( private String getAMContainerCrashedDiagnostics(
RMAppAttemptContainerFinishedEvent finishEvent) { RMAppAttemptContainerFinishedEvent finishEvent) {
ContainerStatus status = finishEvent.getContainerStatus(); ContainerStatus status = finishEvent.getContainerStatus();
String diagnostics = StringBuilder diagnosticsBuilder = new StringBuilder();
"AM Container for " + finishEvent.getApplicationAttemptId() diagnosticsBuilder.append("AM Container for ").append(
+ " exited with " + " exitCode: " + status.getExitStatus() + ". " finishEvent.getApplicationAttemptId()).append(
+ "Check application tracking page: " + this.getTrackingUrl() " exited with ").append(" exitCode: ").append(status.getExitStatus()).
+ " . Then, click on links to logs of each attempt for detailed output. "; append("\n");
return diagnostics; if (this.getTrackingUrl() != null) {
diagnosticsBuilder.append("For more detailed output,").append(
" check application tracking page:").append(
this.getTrackingUrl()).append(
"Then, click on links to logs of each attempt.\n");
}
diagnosticsBuilder.append("Diagnostics: ").append(status.getDiagnostics())
.append("Failing this attempt");
return diagnosticsBuilder.toString();
} }
private static class FinalTransition extends BaseFinalTransition { private static class FinalTransition extends BaseFinalTransition {

View File

@ -823,7 +823,9 @@ public class TestRMAppAttemptTransitions {
applicationAttempt.getAppAttemptState()); applicationAttempt.getAppAttemptState());
verifyTokenCount(applicationAttempt.getAppAttemptId(), 1); verifyTokenCount(applicationAttempt.getAppAttemptId(), 1);
verifyApplicationAttemptFinished(RMAppAttemptState.FAILED); verifyApplicationAttemptFinished(RMAppAttemptState.FAILED);
verifyAMCrashAtAllocatedDiagnosticInfo(applicationAttempt.getDiagnostics()); boolean shouldCheckURL = (applicationAttempt.getTrackingUrl() != null);
verifyAMCrashAtAllocatedDiagnosticInfo(applicationAttempt.getDiagnostics(),
exitCode, shouldCheckURL);
} }
@Test @Test
@ -1241,11 +1243,18 @@ public class TestRMAppAttemptTransitions {
verifyApplicationAttemptFinished(RMAppAttemptState.FAILED); verifyApplicationAttemptFinished(RMAppAttemptState.FAILED);
} }
private void verifyAMCrashAtAllocatedDiagnosticInfo(String diagnostics) { private void verifyAMCrashAtAllocatedDiagnosticInfo(String diagnostics,
assertTrue("Diagnostic information does not contain application proxy URL", int exitCode, boolean shouldCheckURL) {
diagnostics.contains(applicationAttempt.getWebProxyBase()));
assertTrue("Diagnostic information does not point the logs to the users", assertTrue("Diagnostic information does not point the logs to the users",
diagnostics.contains("logs")); diagnostics.contains("logs"));
assertTrue("Diagnostic information does not contain application attempt id",
diagnostics.contains(applicationAttempt.getAppAttemptId().toString()));
assertTrue("Diagnostic information does not contain application exit code",
diagnostics.contains("exitCode: " + exitCode));
if (shouldCheckURL) {
assertTrue("Diagnostic information does not contain application proxy URL",
diagnostics.contains(applicationAttempt.getWebProxyBase()));
}
} }
private void verifyTokenCount(ApplicationAttemptId appAttemptId, int count) { private void verifyTokenCount(ApplicationAttemptId appAttemptId, int count) {