YARN-7088. Add application launch time to Resource Manager REST API. (Kanwaljeet Sachdev via Haibo Chen)
(cherry picked from commit bb92bfb4ef
)
(cherry picked from commit 3a764250262e745a6762dd6551b0d0a6af39e891)
(cherry picked from commit 75df8bed6eed86ad7c34460a1167c35d48b559d7)
This commit is contained in:
parent
c77f7e25c9
commit
c02c19121e
|
@ -89,7 +89,7 @@ public class NotRunningJob implements MRClientProtocol {
|
|||
// used for a non running job
|
||||
return ApplicationReport.newInstance(unknownAppId, unknownAttemptId,
|
||||
"N/A", "N/A", "N/A", "N/A", 0, null, YarnApplicationState.NEW, "N/A",
|
||||
"N/A", 0, 0, FinalApplicationStatus.UNDEFINED, null, "N/A", 0.0f,
|
||||
"N/A", 0, 0, 0, FinalApplicationStatus.UNDEFINED, null, "N/A", 0.0f,
|
||||
YarnConfiguration.DEFAULT_APPLICATION_TYPE, null);
|
||||
}
|
||||
|
||||
|
|
|
@ -515,7 +515,7 @@ public class TestClientServiceDelegate {
|
|||
appId, 0);
|
||||
return ApplicationReport.newInstance(appId, attemptId, "user", "queue",
|
||||
"appname", "host", 124, null, YarnApplicationState.FINISHED,
|
||||
"diagnostics", "url", 0, 0, FinalApplicationStatus.SUCCEEDED, null,
|
||||
"diagnostics", "url", 0, 0, 0, FinalApplicationStatus.SUCCEEDED, null,
|
||||
"N/A", 0.0f, YarnConfiguration.DEFAULT_APPLICATION_TYPE, null);
|
||||
}
|
||||
|
||||
|
@ -525,7 +525,7 @@ public class TestClientServiceDelegate {
|
|||
appId, 0);
|
||||
return ApplicationReport.newInstance(appId, attemptId, "user", "queue",
|
||||
"appname", host, port, null, YarnApplicationState.RUNNING, "diagnostics",
|
||||
"url", 0, 0, FinalApplicationStatus.UNDEFINED, null, "N/A", 0.0f,
|
||||
"url", 0, 0, 0, FinalApplicationStatus.UNDEFINED, null, "N/A", 0.0f,
|
||||
YarnConfiguration.DEFAULT_APPLICATION_TYPE, null);
|
||||
}
|
||||
|
||||
|
|
|
@ -206,7 +206,8 @@ public class TestYARNRunner {
|
|||
.thenReturn(
|
||||
ApplicationReport.newInstance(appId, null, "tmp", "tmp", "tmp",
|
||||
"tmp", 0, null, YarnApplicationState.FINISHED, "tmp", "tmp",
|
||||
0l, 0l, FinalApplicationStatus.SUCCEEDED, null, null, 0f,
|
||||
0L, 0L, 0L,
|
||||
FinalApplicationStatus.SUCCEEDED, null, null, 0f,
|
||||
"tmp", null));
|
||||
yarnRunner.killJob(jobId);
|
||||
verify(clientDelegate).killJob(jobId);
|
||||
|
|
|
@ -58,7 +58,8 @@ public abstract class ApplicationReport {
|
|||
ApplicationAttemptId applicationAttemptId, String user, String queue,
|
||||
String name, String host, int rpcPort, Token clientToAMToken,
|
||||
YarnApplicationState state, String diagnostics, String url,
|
||||
long startTime, long finishTime, FinalApplicationStatus finalStatus,
|
||||
long startTime, long launchTime, long finishTime,
|
||||
FinalApplicationStatus finalStatus,
|
||||
ApplicationResourceUsageReport appResources, String origTrackingUrl,
|
||||
float progress, String applicationType, Token amRmToken) {
|
||||
ApplicationReport report = Records.newRecord(ApplicationReport.class);
|
||||
|
@ -74,6 +75,7 @@ public abstract class ApplicationReport {
|
|||
report.setDiagnostics(diagnostics);
|
||||
report.setTrackingUrl(url);
|
||||
report.setStartTime(startTime);
|
||||
report.setLaunchTime(launchTime);
|
||||
report.setFinishTime(finishTime);
|
||||
report.setFinalApplicationStatus(finalStatus);
|
||||
report.setApplicationResourceUsageReport(appResources);
|
||||
|
@ -84,13 +86,40 @@ public abstract class ApplicationReport {
|
|||
return report;
|
||||
}
|
||||
|
||||
|
||||
@Private
|
||||
@Unstable
|
||||
public static ApplicationReport newInstance(ApplicationId applicationId,
|
||||
ApplicationAttemptId applicationAttemptId, String user, String queue,
|
||||
String name, String host, int rpcPort, Token clientToAMToken,
|
||||
YarnApplicationState state, String diagnostics, String url,
|
||||
long startTime, long finishTime, FinalApplicationStatus finalStatus,
|
||||
long startTime, long finishTime,
|
||||
FinalApplicationStatus finalStatus,
|
||||
ApplicationResourceUsageReport appResources, String origTrackingUrl,
|
||||
float progress, String applicationType, Token amRmToken,
|
||||
Set<String> tags, boolean unmanagedApplication, Priority priority,
|
||||
String appNodeLabelExpression, String amNodeLabelExpression) {
|
||||
ApplicationReport report =
|
||||
newInstance(applicationId, applicationAttemptId, user, queue, name,
|
||||
host, rpcPort, clientToAMToken, state, diagnostics, url,
|
||||
startTime, 0, finishTime, finalStatus, appResources,
|
||||
origTrackingUrl, progress, applicationType, amRmToken);
|
||||
report.setApplicationTags(tags);
|
||||
report.setUnmanagedApp(unmanagedApplication);
|
||||
report.setPriority(priority);
|
||||
report.setAppNodeLabelExpression(appNodeLabelExpression);
|
||||
report.setAmNodeLabelExpression(amNodeLabelExpression);
|
||||
return report;
|
||||
}
|
||||
|
||||
@Private
|
||||
@Unstable
|
||||
public static ApplicationReport newInstance(ApplicationId applicationId,
|
||||
ApplicationAttemptId applicationAttemptId, String user, String queue,
|
||||
String name, String host, int rpcPort, Token clientToAMToken,
|
||||
YarnApplicationState state, String diagnostics, String url,
|
||||
long startTime, long launchTime, long finishTime,
|
||||
FinalApplicationStatus finalStatus,
|
||||
ApplicationResourceUsageReport appResources, String origTrackingUrl,
|
||||
float progress, String applicationType, Token amRmToken, Set<String> tags,
|
||||
boolean unmanagedApplication, Priority priority,
|
||||
|
@ -98,8 +127,8 @@ public abstract class ApplicationReport {
|
|||
ApplicationReport report =
|
||||
newInstance(applicationId, applicationAttemptId, user, queue, name,
|
||||
host, rpcPort, clientToAMToken, state, diagnostics, url, startTime,
|
||||
finishTime, finalStatus, appResources, origTrackingUrl, progress,
|
||||
applicationType, amRmToken);
|
||||
launchTime, finishTime, finalStatus, appResources,
|
||||
origTrackingUrl, progress, applicationType, amRmToken);
|
||||
report.setApplicationTags(tags);
|
||||
report.setUnmanagedApp(unmanagedApplication);
|
||||
report.setPriority(priority);
|
||||
|
@ -282,6 +311,14 @@ public abstract class ApplicationReport {
|
|||
@Unstable
|
||||
public abstract void setStartTime(long startTime);
|
||||
|
||||
@Private
|
||||
@Unstable
|
||||
public abstract void setLaunchTime(long setLaunchTime);
|
||||
|
||||
@Public
|
||||
@Unstable
|
||||
public abstract long getLaunchTime();
|
||||
|
||||
/**
|
||||
* Get the <em>finish time</em> of the application.
|
||||
* @return <em>finish time</em> of the application
|
||||
|
|
|
@ -246,6 +246,7 @@ message ApplicationReportProto {
|
|||
optional string appNodeLabelExpression = 24;
|
||||
optional string amNodeLabelExpression = 25;
|
||||
repeated AppTimeoutsMapProto appTimeouts = 26;
|
||||
optional int64 launchTime = 27;
|
||||
}
|
||||
|
||||
message AppTimeoutsMapProto {
|
||||
|
|
|
@ -627,7 +627,7 @@ public abstract class ProtocolHATestBase extends ClientBaseWithFixes {
|
|||
ApplicationReport.newInstance(appId, attemptId, "fakeUser",
|
||||
"fakeQueue", "fakeApplicationName", "localhost", 0, null,
|
||||
YarnApplicationState.FINISHED, "fake an application report", "",
|
||||
1000l, 1200l, FinalApplicationStatus.FAILED, null, "", 50f,
|
||||
1000l, 1000l, 1200l, FinalApplicationStatus.FAILED, null, "", 50f,
|
||||
"fakeApplicationType", null);
|
||||
return report;
|
||||
}
|
||||
|
|
|
@ -332,7 +332,7 @@ public class TestAHSClient {
|
|||
ApplicationReport.newInstance(applicationId,
|
||||
ApplicationAttemptId.newInstance(applicationId, 1), "user",
|
||||
"queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN",
|
||||
null);
|
||||
List<ApplicationReport> applicationReports =
|
||||
|
@ -389,7 +389,7 @@ public class TestAHSClient {
|
|||
ApplicationReport.newInstance(applicationId2,
|
||||
ApplicationAttemptId.newInstance(applicationId2, 2), "user2",
|
||||
"queue2", "appname2", "host2", 125, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics2", "url2", 2, 2,
|
||||
YarnApplicationState.FINISHED, "diagnostics2", "url2", 2, 2, 2,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.63789f,
|
||||
"NON-YARN", null);
|
||||
applicationReports.add(newApplicationReport2);
|
||||
|
@ -399,7 +399,7 @@ public class TestAHSClient {
|
|||
ApplicationReport.newInstance(applicationId3,
|
||||
ApplicationAttemptId.newInstance(applicationId3, 3), "user3",
|
||||
"queue3", "appname3", "host3", 126, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics3", "url3", 3, 3,
|
||||
YarnApplicationState.RUNNING, "diagnostics3", "url3", 3, 3, 3,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.73789f,
|
||||
"MAPREDUCE", null);
|
||||
applicationReports.add(newApplicationReport3);
|
||||
|
@ -409,7 +409,7 @@ public class TestAHSClient {
|
|||
ApplicationReport.newInstance(applicationId4,
|
||||
ApplicationAttemptId.newInstance(applicationId4, 4), "user4",
|
||||
"queue4", "appname4", "host4", 127, null,
|
||||
YarnApplicationState.FAILED, "diagnostics4", "url4", 4, 4,
|
||||
YarnApplicationState.FAILED, "diagnostics4", "url4", 4, 4, 4,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.83789f,
|
||||
"NON-MAPREDUCE", null);
|
||||
applicationReports.add(newApplicationReport4);
|
||||
|
|
|
@ -738,7 +738,7 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase {
|
|||
ApplicationReport newApplicationReport = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
List<ApplicationReport> applicationReports = new ArrayList<ApplicationReport>();
|
||||
applicationReports.add(newApplicationReport);
|
||||
|
@ -813,7 +813,7 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase {
|
|||
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
|
||||
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 2),
|
||||
"user2", "queue2", "appname2", "host2", 125, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics2", "url2", 2, 2,
|
||||
YarnApplicationState.FINISHED, "diagnostics2", "url2", 2, 2, 2,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.63789f, "NON-YARN",
|
||||
null);
|
||||
applicationReports.add(newApplicationReport2);
|
||||
|
@ -822,7 +822,7 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase {
|
|||
ApplicationReport newApplicationReport3 = ApplicationReport.newInstance(
|
||||
applicationId3, ApplicationAttemptId.newInstance(applicationId3, 3),
|
||||
"user3", "queue3", "appname3", "host3", 126, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics3", "url3", 3, 3,
|
||||
YarnApplicationState.RUNNING, "diagnostics3", "url3", 3, 3, 3,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.73789f, "MAPREDUCE",
|
||||
null);
|
||||
applicationReports.add(newApplicationReport3);
|
||||
|
@ -833,7 +833,7 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase {
|
|||
applicationId4,
|
||||
ApplicationAttemptId.newInstance(applicationId4, 4),
|
||||
"user4", "queue4", "appname4", "host4", 127, null,
|
||||
YarnApplicationState.FAILED, "diagnostics4", "url4", 4, 4,
|
||||
YarnApplicationState.FAILED, "diagnostics4", "url4", 4, 4, 4,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.83789f,
|
||||
"NON-MAPREDUCE", null);
|
||||
applicationReports.add(newApplicationReport4);
|
||||
|
|
|
@ -124,7 +124,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, usageReport, "N/A", 0.53789f, "YARN",
|
||||
null, null, false, Priority.newInstance(0), "high-mem", "high-mem");
|
||||
newApplicationReport.setLogAggregationStatus(LogAggregationStatus.SUCCEEDED);
|
||||
|
@ -371,7 +371,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null,
|
||||
Sets.newHashSet("tag1", "tag3"), false, Priority.UNDEFINED, "", "");
|
||||
List<ApplicationReport> applicationReports =
|
||||
|
@ -382,7 +382,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
|
||||
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 2),
|
||||
"user2", "queue2", "appname2", "host2", 125, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics2", "url2", 2, 2,
|
||||
YarnApplicationState.FINISHED, "diagnostics2", "url2", 2, 2, 2,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.63789f, "NON-YARN",
|
||||
null, Sets.newHashSet("tag2", "tag3"), false, Priority.UNDEFINED,
|
||||
"", "");
|
||||
|
@ -392,7 +392,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport3 = ApplicationReport.newInstance(
|
||||
applicationId3, ApplicationAttemptId.newInstance(applicationId3, 3),
|
||||
"user3", "queue3", "appname3", "host3", 126, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics3", "url3", 3, 3,
|
||||
YarnApplicationState.RUNNING, "diagnostics3", "url3", 3, 3, 3,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.73789f, "MAPREDUCE",
|
||||
null, Sets.newHashSet("tag1", "tag4"), false, Priority.UNDEFINED,
|
||||
"", "");
|
||||
|
@ -402,7 +402,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport4 = ApplicationReport.newInstance(
|
||||
applicationId4, ApplicationAttemptId.newInstance(applicationId4, 4),
|
||||
"user4", "queue4", "appname4", "host4", 127, null,
|
||||
YarnApplicationState.FAILED, "diagnostics4", "url4", 4, 4,
|
||||
YarnApplicationState.FAILED, "diagnostics4", "url4", 4, 4, 4,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.83789f,
|
||||
"NON-MAPREDUCE", null, Sets.newHashSet("tag1"), false,
|
||||
Priority.UNDEFINED, "", "");
|
||||
|
@ -412,7 +412,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport5 = ApplicationReport.newInstance(
|
||||
applicationId5, ApplicationAttemptId.newInstance(applicationId5, 5),
|
||||
"user5", "queue5", "appname5", "host5", 128, null,
|
||||
YarnApplicationState.ACCEPTED, "diagnostics5", "url5", 5, 5,
|
||||
YarnApplicationState.ACCEPTED, "diagnostics5", "url5", 5, 5, 5,
|
||||
FinalApplicationStatus.KILLED, null, "N/A", 0.93789f, "HIVE", null,
|
||||
Sets.newHashSet("tag2", "tag4"), false, Priority.UNDEFINED, "", "");
|
||||
applicationReports.add(newApplicationReport5);
|
||||
|
@ -421,7 +421,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport6 = ApplicationReport.newInstance(
|
||||
applicationId6, ApplicationAttemptId.newInstance(applicationId6, 6),
|
||||
"user6", "queue6", "appname6", "host6", 129, null,
|
||||
YarnApplicationState.SUBMITTED, "diagnostics6", "url6", 6, 6,
|
||||
YarnApplicationState.SUBMITTED, "diagnostics6", "url6", 6, 6, 6,
|
||||
FinalApplicationStatus.KILLED, null, "N/A", 0.99789f, "PIG",
|
||||
null, new HashSet<String>(), false, Priority.UNDEFINED, "", "");
|
||||
applicationReports.add(newApplicationReport6);
|
||||
|
@ -995,7 +995,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
|
||||
newApplicationReport2);
|
||||
|
@ -1008,7 +1008,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
|
||||
newApplicationReport);
|
||||
|
@ -1047,12 +1047,12 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport1 = ApplicationReport.newInstance(
|
||||
applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
|
||||
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.34344f, "YARN", null);
|
||||
when(client.getApplicationReport(applicationId1)).thenReturn(
|
||||
newApplicationReport1);
|
||||
|
@ -1072,12 +1072,12 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport3 = ApplicationReport.newInstance(
|
||||
applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
ApplicationReport newApplicationReport4 = ApplicationReport.newInstance(
|
||||
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
|
||||
when(client.getApplicationReport(applicationId1)).thenReturn(
|
||||
newApplicationReport3);
|
||||
|
@ -1115,7 +1115,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport5 = ApplicationReport.newInstance(
|
||||
applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
|
||||
when(client.getApplicationReport(applicationId1)).thenReturn(
|
||||
newApplicationReport5);
|
||||
|
@ -1142,12 +1142,12 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport5 = ApplicationReport.newInstance(
|
||||
applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
ApplicationReport newApplicationReport6 = ApplicationReport.newInstance(
|
||||
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
|
||||
when(client.getApplicationReport(applicationId1)).thenReturn(
|
||||
newApplicationReport5);
|
||||
|
@ -1170,7 +1170,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
|
||||
newApplicationReport2);
|
||||
|
@ -1185,7 +1185,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
|
||||
newApplicationReport);
|
||||
|
@ -1220,7 +1220,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
when(client.getApplicationReport(any(ApplicationId.class)))
|
||||
.thenReturn(newApplicationReport2);
|
||||
|
@ -1235,7 +1235,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport newApplicationReport = ApplicationReport.newInstance(
|
||||
applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
|
||||
"user", "queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
||||
when(client.getApplicationReport(any(ApplicationId.class)))
|
||||
.thenReturn(newApplicationReport);
|
||||
|
@ -2003,7 +2003,7 @@ public class TestYarnCLI {
|
|||
ApplicationReport.newInstance(applicationId,
|
||||
ApplicationAttemptId.newInstance(applicationId, 1), "user",
|
||||
"queue", "appname", "host", 124, null,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
||||
YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0, 0,
|
||||
FinalApplicationStatus.UNDEFINED, null, "N/A", 0.53789f, "YARN",
|
||||
null);
|
||||
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
|
||||
|
|
|
@ -220,6 +220,17 @@ public class ApplicationReportPBImpl extends ApplicationReport {
|
|||
return p.getStartTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLaunchTime() {
|
||||
ApplicationReportProtoOrBuilder p = viaProto ? proto : builder;
|
||||
return p.getLaunchTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLaunchTime(long launchTime) {
|
||||
maybeInitBuilder();
|
||||
builder.setLaunchTime(launchTime);
|
||||
}
|
||||
@Override
|
||||
public long getFinishTime() {
|
||||
ApplicationReportProtoOrBuilder p = viaProto ? proto : builder;
|
||||
|
|
|
@ -58,7 +58,7 @@ public class TestApplicatonReport {
|
|||
ApplicationReport appReport =
|
||||
ApplicationReport.newInstance(appId, appAttemptId, "user", "queue",
|
||||
"appname", "host", 124, null, YarnApplicationState.FINISHED,
|
||||
"diagnostics", "url", 0, 0, FinalApplicationStatus.SUCCEEDED, null,
|
||||
"diagnostics", "url", 0, 0, 0, FinalApplicationStatus.SUCCEEDED, null,
|
||||
"N/A", 0.53789f, YarnConfiguration.DEFAULT_APPLICATION_TYPE, null,
|
||||
null, false, Priority.newInstance(0),"","");
|
||||
return appReport;
|
||||
|
|
|
@ -137,7 +137,7 @@ public class ApplicationHistoryManagerImpl extends AbstractService implements
|
|||
currentApplicationAttemptId, appHistory.getUser(), appHistory.getQueue(),
|
||||
appHistory.getApplicationName(), host, rpcPort, null,
|
||||
appHistory.getYarnApplicationState(), appHistory.getDiagnosticsInfo(),
|
||||
trackingUrl, appHistory.getStartTime(), appHistory.getFinishTime(),
|
||||
trackingUrl, appHistory.getStartTime(), 0, appHistory.getFinishTime(),
|
||||
appHistory.getFinalApplicationStatus(), null, "", 100,
|
||||
appHistory.getApplicationType(), null);
|
||||
}
|
||||
|
|
|
@ -375,7 +375,7 @@ public class BuilderUtils {
|
|||
ApplicationId applicationId, ApplicationAttemptId applicationAttemptId,
|
||||
String user, String queue, String name, String host, int rpcPort,
|
||||
Token clientToAMToken, YarnApplicationState state, String diagnostics,
|
||||
String url, long startTime, long finishTime,
|
||||
String url, long startTime, long launchTime, long finishTime,
|
||||
FinalApplicationStatus finalStatus,
|
||||
ApplicationResourceUsageReport appResources, String origTrackingUrl,
|
||||
float progress, String appType, Token amRmToken, Set<String> tags,
|
||||
|
@ -394,6 +394,7 @@ public class BuilderUtils {
|
|||
report.setDiagnostics(diagnostics);
|
||||
report.setTrackingUrl(url);
|
||||
report.setStartTime(startTime);
|
||||
report.setLaunchTime(launchTime);
|
||||
report.setFinishTime(finishTime);
|
||||
report.setFinalApplicationStatus(finalStatus);
|
||||
report.setApplicationResourceUsageReport(appResources);
|
||||
|
|
|
@ -194,10 +194,9 @@ public class AppBlock extends HtmlBlock {
|
|||
._("FinalStatus Reported by AM:",
|
||||
clairfyAppFinalStatus(app.getFinalAppStatus()))
|
||||
._("Started:", Times.format(app.getStartedTime()))
|
||||
._(
|
||||
"Elapsed:",
|
||||
StringUtils.formatTime(Times.elapsed(app.getStartedTime(),
|
||||
app.getFinishedTime())))
|
||||
._("Launched:", Times.format(app.getLaunchTime()))
|
||||
._("Finished:", Times.format(app.getFinishedTime()))
|
||||
._("Elapsed:", StringUtils.formatTime(app.getElapsedTime()))
|
||||
._(
|
||||
"Tracking URL:",
|
||||
app.getTrackingUrl() == null
|
||||
|
|
|
@ -150,7 +150,9 @@ public class AppsBlock extends HtmlBlock {
|
|||
html.table("#apps").thead().tr().th(".id", "ID").th(".user", "User")
|
||||
.th(".name", "Name").th(".type", "Application Type")
|
||||
.th(".queue", "Queue").th(".priority", "Application Priority")
|
||||
.th(".starttime", "StartTime").th(".finishtime", "FinishTime")
|
||||
.th(".starttime", "StartTime")
|
||||
.th(".launchtime", "LaunchTime")
|
||||
.th(".finishtime", "FinishTime")
|
||||
.th(".state", "State").th(".finalstatus", "FinalStatus")
|
||||
.th(".progress", "Progress").th(".ui", "Tracking UI")._()._().tbody();
|
||||
|
||||
|
@ -188,6 +190,7 @@ public class AppsBlock extends HtmlBlock {
|
|||
.getQueue()))).append("\",\"").append(String
|
||||
.valueOf(app.getPriority()))
|
||||
.append("\",\"").append(app.getStartedTime())
|
||||
.append("\",\"").append(app.getLaunchTime())
|
||||
.append("\",\"").append(app.getFinishedTime())
|
||||
.append("\",\"")
|
||||
.append(app.getAppState() == null ? UNAVAILABLE : app.getAppState())
|
||||
|
|
|
@ -51,7 +51,7 @@ public class WebPageUtils {
|
|||
sb.append("[\n")
|
||||
.append("{'sType':'natural', 'aTargets': [0]")
|
||||
.append(", 'mRender': parseHadoopID }")
|
||||
.append("\n, {'sType':'numeric', 'aTargets': [6, 7]")
|
||||
.append("\n, {'sType':'numeric', 'aTargets': [6, 7, 8]")
|
||||
.append(", 'mRender': renderHadoopDate }")
|
||||
.append("\n, {'sType':'numeric', bSearchable:false, 'aTargets':");
|
||||
if (isFairSchedulerPage) {
|
||||
|
|
|
@ -55,6 +55,7 @@ public class AppInfo {
|
|||
protected FinalApplicationStatus finalAppStatus;
|
||||
protected long submittedTime;
|
||||
protected long startedTime;
|
||||
private long launchTime;
|
||||
protected long finishedTime;
|
||||
protected long elapsedTime;
|
||||
protected String applicationTags;
|
||||
|
@ -88,6 +89,7 @@ public class AppInfo {
|
|||
originalTrackingUrl = app.getOriginalTrackingUrl();
|
||||
submittedTime = app.getStartTime();
|
||||
startedTime = app.getStartTime();
|
||||
launchTime = app.getLaunchTime();
|
||||
finishedTime = app.getFinishTime();
|
||||
elapsedTime = Times.elapsed(startedTime, finishedTime);
|
||||
finalAppStatus = app.getFinalApplicationStatus();
|
||||
|
@ -198,6 +200,10 @@ public class AppInfo {
|
|||
return submittedTime;
|
||||
}
|
||||
|
||||
public long getLaunchTime() {
|
||||
return launchTime;
|
||||
}
|
||||
|
||||
public long getStartedTime() {
|
||||
return startedTime;
|
||||
}
|
||||
|
|
|
@ -310,7 +310,7 @@ public class AMLauncher implements Runnable {
|
|||
LOG.info("Launching master" + application.getAppAttemptId());
|
||||
launch();
|
||||
handler.handle(new RMAppAttemptEvent(application.getAppAttemptId(),
|
||||
RMAppAttemptEventType.LAUNCHED));
|
||||
RMAppAttemptEventType.LAUNCHED, System.currentTimeMillis()));
|
||||
} catch(Exception ie) {
|
||||
onAMLaunchFailed(masterContainer.getId(), ie);
|
||||
}
|
||||
|
|
|
@ -47,7 +47,8 @@ public abstract class ApplicationStateData {
|
|||
public static ApplicationStateData newInstance(long submitTime,
|
||||
long startTime, String user,
|
||||
ApplicationSubmissionContext submissionContext, RMAppState state,
|
||||
String diagnostics, long finishTime, CallerContext callerContext) {
|
||||
String diagnostics, long launchTime, long finishTime,
|
||||
CallerContext callerContext) {
|
||||
ApplicationStateData appState = Records.newRecord(ApplicationStateData.class);
|
||||
appState.setSubmitTime(submitTime);
|
||||
appState.setStartTime(startTime);
|
||||
|
@ -55,6 +56,7 @@ public abstract class ApplicationStateData {
|
|||
appState.setApplicationSubmissionContext(submissionContext);
|
||||
appState.setState(state);
|
||||
appState.setDiagnostics(diagnostics);
|
||||
appState.setLaunchTime(launchTime);
|
||||
appState.setFinishTime(finishTime);
|
||||
appState.setCallerContext(callerContext);
|
||||
return appState;
|
||||
|
@ -63,7 +65,8 @@ public abstract class ApplicationStateData {
|
|||
public static ApplicationStateData newInstance(long submitTime,
|
||||
long startTime, String user,
|
||||
ApplicationSubmissionContext submissionContext, RMAppState state,
|
||||
String diagnostics, long finishTime, CallerContext callerContext,
|
||||
String diagnostics, long launchTime, long finishTime,
|
||||
CallerContext callerContext,
|
||||
Map<ApplicationTimeoutType, Long> applicationTimeouts) {
|
||||
ApplicationStateData appState =
|
||||
Records.newRecord(ApplicationStateData.class);
|
||||
|
@ -73,6 +76,7 @@ public abstract class ApplicationStateData {
|
|||
appState.setApplicationSubmissionContext(submissionContext);
|
||||
appState.setState(state);
|
||||
appState.setDiagnostics(diagnostics);
|
||||
appState.setLaunchTime(launchTime);
|
||||
appState.setFinishTime(finishTime);
|
||||
appState.setCallerContext(callerContext);
|
||||
appState.setApplicationTimeouts(applicationTimeouts);
|
||||
|
@ -82,7 +86,7 @@ public abstract class ApplicationStateData {
|
|||
public static ApplicationStateData newInstance(long submitTime,
|
||||
long startTime, ApplicationSubmissionContext context, String user,
|
||||
CallerContext callerContext) {
|
||||
return newInstance(submitTime, startTime, user, context, null, "", 0,
|
||||
return newInstance(submitTime, startTime, user, context, null, "", 0, 0,
|
||||
callerContext);
|
||||
}
|
||||
|
||||
|
@ -136,6 +140,20 @@ public abstract class ApplicationStateData {
|
|||
@Unstable
|
||||
public abstract void setStartTime(long startTime);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get the <em>launch time</em> of the application.
|
||||
* @return <em>launch time</em> of the application
|
||||
*/
|
||||
@Public
|
||||
@Stable
|
||||
public abstract long getLaunchTime();
|
||||
|
||||
@Private
|
||||
@Unstable
|
||||
public abstract void setLaunchTime(long launchTime);
|
||||
|
||||
/**
|
||||
* The application submitter
|
||||
*/
|
||||
|
|
|
@ -120,6 +120,19 @@ public class ApplicationStateDataPBImpl extends ApplicationStateData {
|
|||
builder.setStartTime(startTime);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public long getLaunchTime() {
|
||||
ApplicationStateDataProtoOrBuilder p = viaProto ? proto : builder;
|
||||
return p.getLaunchTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLaunchTime(long launchTime) {
|
||||
maybeInitBuilder();
|
||||
builder.setLaunchTime(launchTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUser() {
|
||||
ApplicationStateDataProtoOrBuilder p = viaProto ? proto : builder;
|
||||
|
|
|
@ -177,6 +177,14 @@ public interface RMApp extends EventHandler<RMAppEvent> {
|
|||
*/
|
||||
long getSubmitTime();
|
||||
|
||||
/**
|
||||
* The launch time of the application.
|
||||
* Since getStartTime() returns what is essentially submit time,
|
||||
* this new field is to prevent potential backwards compatibility issues.
|
||||
* @return the launch time of the application.
|
||||
*/
|
||||
long getLaunchTime();
|
||||
|
||||
/**
|
||||
* The tracking url for the application master.
|
||||
* @return the tracking url for the application master.
|
||||
|
|
|
@ -37,6 +37,12 @@ public class RMAppEvent extends AbstractEvent<RMAppEventType>{
|
|||
this.diagnosticMsg = diagnostic;
|
||||
}
|
||||
|
||||
public RMAppEvent(ApplicationId appId, RMAppEventType type, long timeStamp) {
|
||||
super(type, timeStamp);
|
||||
this.appId = appId;
|
||||
this.diagnosticMsg = "";
|
||||
}
|
||||
|
||||
public ApplicationId getApplicationId() {
|
||||
return this.appId;
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ public enum RMAppEventType {
|
|||
ATTEMPT_FAILED,
|
||||
ATTEMPT_KILLED,
|
||||
NODE_UPDATE,
|
||||
ATTEMPT_LAUNCHED,
|
||||
|
||||
// Source: Container and ResourceTracker
|
||||
APP_RUNNING_ON_NODE,
|
||||
|
|
|
@ -159,6 +159,7 @@ public class RMAppImpl implements RMApp, Recoverable {
|
|||
|
||||
// Mutable fields
|
||||
private long startTime;
|
||||
private long launchTime = 0;
|
||||
private long finishTime = 0;
|
||||
private long storedFinishTime = 0;
|
||||
private int firstAttemptIdInStateStore = 1;
|
||||
|
@ -283,6 +284,10 @@ public class RMAppImpl implements RMApp, Recoverable {
|
|||
.addTransition(RMAppState.ACCEPTED, RMAppState.ACCEPTED,
|
||||
RMAppEventType.APP_RUNNING_ON_NODE,
|
||||
new AppRunningOnNodeTransition())
|
||||
// Handle AppAttemptLaunch to upate the launchTime and publish to ATS
|
||||
.addTransition(RMAppState.ACCEPTED, RMAppState.ACCEPTED,
|
||||
RMAppEventType.ATTEMPT_LAUNCHED,
|
||||
new AttemptLaunchedTransition())
|
||||
|
||||
// Transitions from RUNNING state
|
||||
.addTransition(RMAppState.RUNNING, RMAppState.RUNNING,
|
||||
|
@ -769,9 +774,9 @@ public class RMAppImpl implements RMApp, Recoverable {
|
|||
this.applicationId, currentApplicationAttemptId, this.user,
|
||||
this.queue, this.name, host, rpcPort, clientToAMToken,
|
||||
createApplicationState(), diags, trackingUrl, this.startTime,
|
||||
this.finishTime, finishState, appUsageReport, origTrackingUrl,
|
||||
progress, this.applicationType, amrmToken, applicationTags,
|
||||
this.getApplicationPriority());
|
||||
this.launchTime, this.finishTime, finishState, appUsageReport,
|
||||
origTrackingUrl, progress, this.applicationType, amrmToken,
|
||||
applicationTags, this.getApplicationPriority());
|
||||
report.setLogAggregationStatus(logAggregationStatus);
|
||||
report.setUnmanagedApp(submissionContext.getUnmanagedAM());
|
||||
report.setAppNodeLabelExpression(getAppNodeLabelExpression());
|
||||
|
@ -824,6 +829,17 @@ public class RMAppImpl implements RMApp, Recoverable {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLaunchTime() {
|
||||
this.readLock.lock();
|
||||
|
||||
try {
|
||||
return this.launchTime;
|
||||
} finally {
|
||||
this.readLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getSubmitTime() {
|
||||
return this.submitTime;
|
||||
|
@ -921,6 +937,7 @@ public class RMAppImpl implements RMApp, Recoverable {
|
|||
.getDiagnostics());
|
||||
this.storedFinishTime = appState.getFinishTime();
|
||||
this.startTime = appState.getStartTime();
|
||||
this.launchTime = appState.getLaunchTime();
|
||||
this.callerContext = appState.getCallerContext();
|
||||
this.applicationTimeouts = appState.getApplicationTimeouts();
|
||||
// If interval > 0, some attempts might have been deleted.
|
||||
|
@ -1023,6 +1040,21 @@ public class RMAppImpl implements RMApp, Recoverable {
|
|||
};
|
||||
}
|
||||
|
||||
private static final class AttemptLaunchedTransition
|
||||
extends RMAppTransition {
|
||||
@Override
|
||||
public void transition(RMAppImpl app, RMAppEvent event) {
|
||||
|
||||
if(app.launchTime == 0) {
|
||||
LOG.info("update the launch time for applicationId: "+
|
||||
app.getApplicationId()+", attemptId: "+
|
||||
app.getCurrentAppAttempt().getAppAttemptId()+
|
||||
"launchTime: "+event.getTimestamp());
|
||||
app.launchTime = event.getTimestamp();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static final class AppRunningOnNodeTransition extends RMAppTransition {
|
||||
public void transition(RMAppImpl app, RMAppEvent event) {
|
||||
RMAppRunningOnNodeEvent nodeAddedEvent = (RMAppRunningOnNodeEvent) event;
|
||||
|
@ -1278,7 +1310,8 @@ public class RMAppImpl implements RMApp, Recoverable {
|
|||
ApplicationStateData appState =
|
||||
ApplicationStateData.newInstance(this.submitTime, this.startTime,
|
||||
this.user, this.submissionContext,
|
||||
stateToBeStored, diags, this.storedFinishTime, this.callerContext);
|
||||
stateToBeStored, diags, this.launchTime, this.storedFinishTime,
|
||||
this.callerContext);
|
||||
appState.setApplicationTimeouts(this.applicationTimeouts);
|
||||
this.rmContext.getStateStore().updateApplicationState(appState);
|
||||
}
|
||||
|
|
|
@ -38,6 +38,13 @@ public class RMAppAttemptEvent extends AbstractEvent<RMAppAttemptEventType> {
|
|||
this.diagnosticMsg = diagnostics;
|
||||
}
|
||||
|
||||
public RMAppAttemptEvent(ApplicationAttemptId appAttemptId,
|
||||
RMAppAttemptEventType type, long timeStamp) {
|
||||
super(type, timeStamp);
|
||||
this.appAttemptId = appAttemptId;
|
||||
this.diagnosticMsg = "";
|
||||
}
|
||||
|
||||
public ApplicationAttemptId getApplicationAttemptId() {
|
||||
return this.appAttemptId;
|
||||
}
|
||||
|
|
|
@ -1519,7 +1519,9 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable {
|
|||
appAttempt.launchAMStartTime;
|
||||
ClusterMetrics.getMetrics().addAMLaunchDelay(delay);
|
||||
}
|
||||
|
||||
appAttempt.eventHandler.handle(
|
||||
new RMAppEvent(appAttempt.getAppAttemptId().getApplicationId(),
|
||||
RMAppEventType.ATTEMPT_LAUNCHED, event.getTimestamp()));
|
||||
appAttempt
|
||||
.updateAMLaunchDiagnostics(AMState.LAUNCHED.getDiagnosticMessage());
|
||||
// Register with AMLivelinessMonitor
|
||||
|
|
|
@ -89,6 +89,7 @@ public class FairSchedulerAppsBlock extends HtmlBlock {
|
|||
th(".queue", "Queue").
|
||||
th(".fairshare", "Fair Share").
|
||||
th(".starttime", "StartTime").
|
||||
th(".launchTime", "LaunchTime").
|
||||
th(".finishtime", "FinishTime").
|
||||
th(".state", "State").
|
||||
th(".finalstatus", "FinalStatus").
|
||||
|
@ -135,6 +136,7 @@ public class FairSchedulerAppsBlock extends HtmlBlock {
|
|||
appInfo.getQueue()))).append("\",\"")
|
||||
.append(fairShare).append("\",\"")
|
||||
.append(appInfo.getStartTime()).append("\",\"")
|
||||
.append(appInfo.getLaunchTime()).append("\",\"")
|
||||
.append(appInfo.getFinishTime()).append("\",\"")
|
||||
.append(appInfo.getState()).append("\",\"")
|
||||
.append(appInfo.getFinalStatus()).append("\",\"")
|
||||
|
|
|
@ -63,6 +63,7 @@ public class RMAppsBlock extends AppsBlock {
|
|||
.th(".name", "Name").th(".type", "Application Type")
|
||||
.th(".queue", "Queue").th(".priority", "Application Priority")
|
||||
.th(".starttime", "StartTime")
|
||||
.th("launchtime", "LaunchTime")
|
||||
.th(".finishtime", "FinishTime").th(".state", "State")
|
||||
.th(".finalstatus", "FinalStatus")
|
||||
.th(".runningcontainer", "Running Containers")
|
||||
|
@ -135,6 +136,7 @@ public class RMAppsBlock extends AppsBlock {
|
|||
.getQueue()))).append("\",\"").append(String
|
||||
.valueOf(app.getPriority()))
|
||||
.append("\",\"").append(app.getStartedTime())
|
||||
.append("\",\"").append(app.getLaunchTime())
|
||||
.append("\",\"").append(app.getFinishedTime())
|
||||
.append("\",\"")
|
||||
.append(app.getAppState() == null ? UNAVAILABLE : app.getAppState())
|
||||
|
|
|
@ -87,6 +87,7 @@ public class AppInfo {
|
|||
|
||||
// these are only allowed if acls allow
|
||||
protected long startedTime;
|
||||
private long launchTime;
|
||||
protected long finishedTime;
|
||||
protected long elapsedTime;
|
||||
protected String amContainerLogs;
|
||||
|
@ -176,6 +177,7 @@ public class AppInfo {
|
|||
this.clusterId = ResourceManager.getClusterTimeStamp();
|
||||
if (hasAccess) {
|
||||
this.startedTime = app.getStartTime();
|
||||
this.launchTime = app.getLaunchTime();
|
||||
this.finishedTime = app.getFinishTime();
|
||||
this.elapsedTime =
|
||||
Times.elapsed(app.getStartTime(), app.getFinishTime());
|
||||
|
@ -386,6 +388,10 @@ public class AppInfo {
|
|||
return this.startedTime;
|
||||
}
|
||||
|
||||
public long getLaunchTime() {
|
||||
return this.launchTime;
|
||||
}
|
||||
|
||||
public long getFinishTime() {
|
||||
return this.finishedTime;
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@ message ApplicationStateDataProto {
|
|||
optional int64 finish_time = 7;
|
||||
optional hadoop.common.RPCCallerContextProto caller_context = 8;
|
||||
repeated ApplicationTimeoutMapProto application_timeouts = 9;
|
||||
optional int64 launch_time = 10;
|
||||
}
|
||||
|
||||
message ApplicationAttemptStateDataProto {
|
||||
|
|
|
@ -90,6 +90,11 @@ public abstract class MockAsm extends MockApps {
|
|||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLaunchTime() {
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getFinishTime() {
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
|
@ -258,6 +263,7 @@ public abstract class MockAsm extends MockApps {
|
|||
final String name = newAppName();
|
||||
final String queue = newQueue();
|
||||
final long start = 123456 + i * 1000;
|
||||
final long launch = start + i * 100;
|
||||
final long finish = 234567 + i * 1000;
|
||||
final String type = YarnConfiguration.DEFAULT_APPLICATION_TYPE;
|
||||
YarnApplicationState[] allStates = YarnApplicationState.values();
|
||||
|
@ -293,6 +299,11 @@ public abstract class MockAsm extends MockApps {
|
|||
return start;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLaunchTime() {
|
||||
return launch;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getFinishTime() {
|
||||
return finish;
|
||||
|
@ -342,7 +353,7 @@ public abstract class MockAsm extends MockApps {
|
|||
ApplicationReport report = ApplicationReport.newInstance(
|
||||
getApplicationId(), appAttemptId, getUser(), getQueue(),
|
||||
getName(), null, 0, null, null, getDiagnostics().toString(),
|
||||
getTrackingUrl(), getStartTime(), getFinishTime(),
|
||||
getTrackingUrl(), getLaunchTime(), getStartTime(), getFinishTime(),
|
||||
getFinalApplicationStatus(), usageReport , null, getProgress(),
|
||||
type, null);
|
||||
return report;
|
||||
|
|
|
@ -356,7 +356,7 @@ public class RMStateStoreTestBase {
|
|||
ApplicationStateData.newInstance(appState.getSubmitTime(),
|
||||
appState.getStartTime(), appState.getUser(),
|
||||
appState.getApplicationSubmissionContext(), RMAppState.FINISHED,
|
||||
"appDiagnostics", 1234, appState.getCallerContext());
|
||||
"appDiagnostics", 123, 1234, appState.getCallerContext());
|
||||
appState2.attempts.putAll(appState.attempts);
|
||||
store.updateApplicationState(appState2);
|
||||
|
||||
|
@ -381,7 +381,7 @@ public class RMStateStoreTestBase {
|
|||
ApplicationStateData dummyApp =
|
||||
ApplicationStateData.newInstance(appState.getSubmitTime(),
|
||||
appState.getStartTime(), appState.getUser(), dummyContext,
|
||||
RMAppState.FINISHED, "appDiagnostics", 1234, null);
|
||||
RMAppState.FINISHED, "appDiagnostics", 123, 1234, null);
|
||||
store.updateApplicationState(dummyApp);
|
||||
|
||||
ApplicationAttemptId dummyAttemptId =
|
||||
|
|
|
@ -410,7 +410,7 @@ public class TestFSRMStateStore extends RMStateStoreTestBase {
|
|||
store.storeApplicationStateInternal(
|
||||
ApplicationId.newInstance(100L, 1),
|
||||
ApplicationStateData.newInstance(111, 111, "user", null,
|
||||
RMAppState.ACCEPTED, "diagnostics", 333, null));
|
||||
RMAppState.ACCEPTED, "diagnostics", 222, 333, null));
|
||||
} catch (Exception e) {
|
||||
assertionFailedInThread.set(true);
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -797,7 +797,7 @@ public class TestZKRMStateStore extends RMStateStoreTestBase {
|
|||
long finishTime, boolean isFinished) {
|
||||
return ApplicationStateData.newInstance(submitTime, startTime, "test",
|
||||
ctxt, isFinished ? RMAppState.FINISHED : null, isFinished ?
|
||||
"appDiagnostics" : "", isFinished ? finishTime : 0, null);
|
||||
"appDiagnostics" : "", 0, isFinished ? finishTime : 0, null);
|
||||
}
|
||||
|
||||
private static ApplicationAttemptStateData createFinishedAttempt(
|
||||
|
|
|
@ -55,6 +55,7 @@ public class MockRMApp implements RMApp {
|
|||
String name = MockApps.newAppName();
|
||||
String queue = MockApps.newQueue();
|
||||
long start = System.currentTimeMillis() - (int) (Math.random() * DT);
|
||||
private long launch = start;
|
||||
long submit = start - (int) (Math.random() * DT);
|
||||
long finish = 0;
|
||||
RMAppState state = RMAppState.NEW;
|
||||
|
@ -185,6 +186,11 @@ public class MockRMApp implements RMApp {
|
|||
return submit;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLaunchTime() {
|
||||
return launch;
|
||||
}
|
||||
|
||||
public void setStartTime(long time) {
|
||||
this.start = time;
|
||||
}
|
||||
|
|
|
@ -1239,7 +1239,7 @@ public class TestRMAppTransitions {
|
|||
ApplicationStateData appState =
|
||||
ApplicationStateData.newInstance(app.getSubmitTime(), app.getStartTime(),
|
||||
app.getUser(), app.getApplicationSubmissionContext(), rmAppState,
|
||||
null, app.getFinishTime(), null);
|
||||
null, app.getLaunchTime(), app.getFinishTime(), null);
|
||||
applicationState.put(app.getApplicationId(), appState);
|
||||
}
|
||||
|
||||
|
|
|
@ -257,7 +257,7 @@ public class TestRMWebApp {
|
|||
app.getName(), (String) null, 0, (Token) null,
|
||||
app.createApplicationState(),
|
||||
app.getDiagnostics().toString(), (String) null,
|
||||
app.getStartTime(), app.getFinishTime(),
|
||||
app.getStartTime(), app.getLaunchTime(), app.getFinishTime(),
|
||||
app.getFinalApplicationStatus(),
|
||||
(ApplicationResourceUsageReport) null, app.getTrackingUrl(),
|
||||
app.getProgress(), app.getApplicationType(), (Token) null);
|
||||
|
|
|
@ -1498,6 +1498,7 @@ public class TestRMWebServicesApps extends JerseyTestBase {
|
|||
WebServicesTestUtils.getXmlString(element, "diagnostics"),
|
||||
WebServicesTestUtils.getXmlLong(element, "clusterId"),
|
||||
WebServicesTestUtils.getXmlLong(element, "startedTime"),
|
||||
WebServicesTestUtils.getXmlLong(element, "launchTime"),
|
||||
WebServicesTestUtils.getXmlLong(element, "finishedTime"),
|
||||
WebServicesTestUtils.getXmlLong(element, "elapsedTime"),
|
||||
WebServicesTestUtils.getXmlString(element, "amHostHttpAddress"),
|
||||
|
@ -1550,7 +1551,7 @@ public class TestRMWebServicesApps extends JerseyTestBase {
|
|||
public void verifyAppInfo(JSONObject info, RMApp app, boolean hasResourceReqs)
|
||||
throws JSONException, Exception {
|
||||
|
||||
int expectedNumberOfElements = 36 + (hasResourceReqs ? 2 : 0);
|
||||
int expectedNumberOfElements = 37 + (hasResourceReqs ? 2 : 0);
|
||||
String appNodeLabelExpression = null;
|
||||
String amNodeLabelExpression = null;
|
||||
if (app.getApplicationSubmissionContext()
|
||||
|
@ -1576,8 +1577,10 @@ public class TestRMWebServicesApps extends JerseyTestBase {
|
|||
info.getString("state"), info.getString("finalStatus"),
|
||||
(float) info.getDouble("progress"), info.getString("trackingUI"),
|
||||
info.getString("diagnostics"), info.getLong("clusterId"),
|
||||
info.getLong("startedTime"), info.getLong("finishedTime"),
|
||||
info.getLong("elapsedTime"), info.getString("amHostHttpAddress"),
|
||||
info.getLong("startedTime"), info.getLong("launchTime"),
|
||||
info.getLong("finishedTime"),
|
||||
info.getLong("elapsedTime"),
|
||||
info.getString("amHostHttpAddress"),
|
||||
info.getString("amContainerLogs"), info.getInt("allocatedMB"),
|
||||
info.getInt("allocatedVCores"), info.getInt("runningContainers"),
|
||||
(float) info.getDouble("queueUsagePercentage"),
|
||||
|
@ -1600,8 +1603,9 @@ public class TestRMWebServicesApps extends JerseyTestBase {
|
|||
public void verifyAppInfoGeneric(RMApp app, String id, String user,
|
||||
String name, String applicationType, String queue, int prioirty,
|
||||
String state, String finalStatus, float progress, String trackingUI,
|
||||
String diagnostics, long clusterId, long startedTime, long finishedTime,
|
||||
long elapsedTime, String amHostHttpAddress, String amContainerLogs,
|
||||
String diagnostics, long clusterId, long startedTime,
|
||||
long launchTime, long finishedTime, long elapsedTime,
|
||||
String amHostHttpAddress, String amContainerLogs,
|
||||
int allocatedMB, int allocatedVCores, int numContainers,
|
||||
float queueUsagePerc, float clusterUsagePerc,
|
||||
int preemptedResourceMB, int preemptedResourceVCores,
|
||||
|
|
Loading…
Reference in New Issue