YARN-7088. Add application launch time to Resource Manager REST API. (Kanwaljeet Sachdev via Haibo Chen)

This commit is contained in:
Haibo Chen 2018-04-17 05:55:46 -07:00
parent 427ad7ecc4
commit 0c14b6f0d8
38 changed files with 249 additions and 70 deletions

View File

@ -89,7 +89,7 @@ public class NotRunningJob implements MRClientProtocol {
// used for a non running job // used for a non running job
return ApplicationReport.newInstance(unknownAppId, unknownAttemptId, return ApplicationReport.newInstance(unknownAppId, unknownAttemptId,
"N/A", "N/A", "N/A", "N/A", 0, null, YarnApplicationState.NEW, "N/A", "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); YarnConfiguration.DEFAULT_APPLICATION_TYPE, null);
} }

View File

@ -515,7 +515,7 @@ public class TestClientServiceDelegate {
appId, 0); appId, 0);
return ApplicationReport.newInstance(appId, attemptId, "user", "queue", return ApplicationReport.newInstance(appId, attemptId, "user", "queue",
"appname", "host", 124, null, YarnApplicationState.FINISHED, "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); "N/A", 0.0f, YarnConfiguration.DEFAULT_APPLICATION_TYPE, null);
} }
@ -525,7 +525,7 @@ public class TestClientServiceDelegate {
appId, 0); appId, 0);
return ApplicationReport.newInstance(appId, attemptId, "user", "queue", return ApplicationReport.newInstance(appId, attemptId, "user", "queue",
"appname", host, port, null, YarnApplicationState.RUNNING, "diagnostics", "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); YarnConfiguration.DEFAULT_APPLICATION_TYPE, null);
} }

View File

@ -272,7 +272,8 @@ public class TestYARNRunner {
.thenReturn( .thenReturn(
ApplicationReport.newInstance(appId, null, "tmp", "tmp", "tmp", ApplicationReport.newInstance(appId, null, "tmp", "tmp", "tmp",
"tmp", 0, null, YarnApplicationState.FINISHED, "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)); "tmp", null));
yarnRunner.killJob(jobId); yarnRunner.killJob(jobId);
verify(clientDelegate).killJob(jobId); verify(clientDelegate).killJob(jobId);

View File

@ -58,7 +58,8 @@ public abstract class ApplicationReport {
ApplicationAttemptId applicationAttemptId, String user, String queue, ApplicationAttemptId applicationAttemptId, String user, String queue,
String name, String host, int rpcPort, Token clientToAMToken, String name, String host, int rpcPort, Token clientToAMToken,
YarnApplicationState state, String diagnostics, String url, YarnApplicationState state, String diagnostics, String url,
long startTime, long finishTime, FinalApplicationStatus finalStatus, long startTime, long launchTime, long finishTime,
FinalApplicationStatus finalStatus,
ApplicationResourceUsageReport appResources, String origTrackingUrl, ApplicationResourceUsageReport appResources, String origTrackingUrl,
float progress, String applicationType, Token amRmToken) { float progress, String applicationType, Token amRmToken) {
ApplicationReport report = Records.newRecord(ApplicationReport.class); ApplicationReport report = Records.newRecord(ApplicationReport.class);
@ -74,6 +75,7 @@ public abstract class ApplicationReport {
report.setDiagnostics(diagnostics); report.setDiagnostics(diagnostics);
report.setTrackingUrl(url); report.setTrackingUrl(url);
report.setStartTime(startTime); report.setStartTime(startTime);
report.setLaunchTime(launchTime);
report.setFinishTime(finishTime); report.setFinishTime(finishTime);
report.setFinalApplicationStatus(finalStatus); report.setFinalApplicationStatus(finalStatus);
report.setApplicationResourceUsageReport(appResources); report.setApplicationResourceUsageReport(appResources);
@ -84,13 +86,40 @@ public abstract class ApplicationReport {
return report; 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,
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 @Private
@Unstable @Unstable
public static ApplicationReport newInstance(ApplicationId applicationId, public static ApplicationReport newInstance(ApplicationId applicationId,
ApplicationAttemptId applicationAttemptId, String user, String queue, ApplicationAttemptId applicationAttemptId, String user, String queue,
String name, String host, int rpcPort, Token clientToAMToken, String name, String host, int rpcPort, Token clientToAMToken,
YarnApplicationState state, String diagnostics, String url, YarnApplicationState state, String diagnostics, String url,
long startTime, long finishTime, FinalApplicationStatus finalStatus, long startTime, long launchTime, long finishTime,
FinalApplicationStatus finalStatus,
ApplicationResourceUsageReport appResources, String origTrackingUrl, ApplicationResourceUsageReport appResources, String origTrackingUrl,
float progress, String applicationType, Token amRmToken, Set<String> tags, float progress, String applicationType, Token amRmToken, Set<String> tags,
boolean unmanagedApplication, Priority priority, boolean unmanagedApplication, Priority priority,
@ -98,8 +127,8 @@ public abstract class ApplicationReport {
ApplicationReport report = ApplicationReport report =
newInstance(applicationId, applicationAttemptId, user, queue, name, newInstance(applicationId, applicationAttemptId, user, queue, name,
host, rpcPort, clientToAMToken, state, diagnostics, url, startTime, host, rpcPort, clientToAMToken, state, diagnostics, url, startTime,
finishTime, finalStatus, appResources, origTrackingUrl, progress, launchTime, finishTime, finalStatus, appResources,
applicationType, amRmToken); origTrackingUrl, progress, applicationType, amRmToken);
report.setApplicationTags(tags); report.setApplicationTags(tags);
report.setUnmanagedApp(unmanagedApplication); report.setUnmanagedApp(unmanagedApplication);
report.setPriority(priority); report.setPriority(priority);
@ -282,6 +311,14 @@ public abstract class ApplicationReport {
@Unstable @Unstable
public abstract void setStartTime(long startTime); 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. * Get the <em>finish time</em> of the application.
* @return <em>finish time</em> of the application * @return <em>finish time</em> of the application

View File

@ -281,6 +281,7 @@ message ApplicationReportProto {
optional string appNodeLabelExpression = 24; optional string appNodeLabelExpression = 24;
optional string amNodeLabelExpression = 25; optional string amNodeLabelExpression = 25;
repeated AppTimeoutsMapProto appTimeouts = 26; repeated AppTimeoutsMapProto appTimeouts = 26;
optional int64 launchTime = 27;
} }
message AppTimeoutsMapProto { message AppTimeoutsMapProto {

View File

@ -626,7 +626,7 @@ public abstract class ProtocolHATestBase extends ClientBaseWithFixes {
ApplicationReport.newInstance(appId, attemptId, "fakeUser", ApplicationReport.newInstance(appId, attemptId, "fakeUser",
"fakeQueue", "fakeApplicationName", "localhost", 0, null, "fakeQueue", "fakeApplicationName", "localhost", 0, null,
YarnApplicationState.FINISHED, "fake an application report", "", YarnApplicationState.FINISHED, "fake an application report", "",
1000L, 1200L, FinalApplicationStatus.FAILED, null, "", 50f, 1000L, 1000L, 1200L, FinalApplicationStatus.FAILED, null, "", 50f,
"fakeApplicationType", null); "fakeApplicationType", null);
return report; return report;
} }

View File

@ -332,7 +332,7 @@ public class TestAHSClient {
ApplicationReport.newInstance(applicationId, ApplicationReport.newInstance(applicationId,
ApplicationAttemptId.newInstance(applicationId, 1), "user", ApplicationAttemptId.newInstance(applicationId, 1), "user",
"queue", "appname", "host", 124, null, "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", FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN",
null); null);
List<ApplicationReport> applicationReports = List<ApplicationReport> applicationReports =
@ -389,7 +389,7 @@ public class TestAHSClient {
ApplicationReport.newInstance(applicationId2, ApplicationReport.newInstance(applicationId2,
ApplicationAttemptId.newInstance(applicationId2, 2), "user2", ApplicationAttemptId.newInstance(applicationId2, 2), "user2",
"queue2", "appname2", "host2", 125, null, "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, FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.63789f,
"NON-YARN", null); "NON-YARN", null);
applicationReports.add(newApplicationReport2); applicationReports.add(newApplicationReport2);
@ -399,7 +399,7 @@ public class TestAHSClient {
ApplicationReport.newInstance(applicationId3, ApplicationReport.newInstance(applicationId3,
ApplicationAttemptId.newInstance(applicationId3, 3), "user3", ApplicationAttemptId.newInstance(applicationId3, 3), "user3",
"queue3", "appname3", "host3", 126, null, "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, FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.73789f,
"MAPREDUCE", null); "MAPREDUCE", null);
applicationReports.add(newApplicationReport3); applicationReports.add(newApplicationReport3);
@ -409,7 +409,7 @@ public class TestAHSClient {
ApplicationReport.newInstance(applicationId4, ApplicationReport.newInstance(applicationId4,
ApplicationAttemptId.newInstance(applicationId4, 4), "user4", ApplicationAttemptId.newInstance(applicationId4, 4), "user4",
"queue4", "appname4", "host4", 127, null, "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, FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.83789f,
"NON-MAPREDUCE", null); "NON-MAPREDUCE", null);
applicationReports.add(newApplicationReport4); applicationReports.add(newApplicationReport4);

View File

@ -737,7 +737,7 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase {
ApplicationReport newApplicationReport = ApplicationReport.newInstance( ApplicationReport newApplicationReport = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
List<ApplicationReport> applicationReports = new ArrayList<ApplicationReport>(); List<ApplicationReport> applicationReports = new ArrayList<ApplicationReport>();
applicationReports.add(newApplicationReport); applicationReports.add(newApplicationReport);
@ -812,7 +812,7 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase {
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance( ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 2), applicationId2, ApplicationAttemptId.newInstance(applicationId2, 2),
"user2", "queue2", "appname2", "host2", 125, null, "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", FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.63789f, "NON-YARN",
null); null);
applicationReports.add(newApplicationReport2); applicationReports.add(newApplicationReport2);
@ -821,7 +821,7 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase {
ApplicationReport newApplicationReport3 = ApplicationReport.newInstance( ApplicationReport newApplicationReport3 = ApplicationReport.newInstance(
applicationId3, ApplicationAttemptId.newInstance(applicationId3, 3), applicationId3, ApplicationAttemptId.newInstance(applicationId3, 3),
"user3", "queue3", "appname3", "host3", 126, null, "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", FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.73789f, "MAPREDUCE",
null); null);
applicationReports.add(newApplicationReport3); applicationReports.add(newApplicationReport3);
@ -832,7 +832,7 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase {
applicationId4, applicationId4,
ApplicationAttemptId.newInstance(applicationId4, 4), ApplicationAttemptId.newInstance(applicationId4, 4),
"user4", "queue4", "appname4", "host4", 127, null, "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, FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.83789f,
"NON-MAPREDUCE", null); "NON-MAPREDUCE", null);
applicationReports.add(newApplicationReport4); applicationReports.add(newApplicationReport4);

View File

@ -136,7 +136,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport = ApplicationReport.newInstance( ApplicationReport newApplicationReport = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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", FinalApplicationStatus.SUCCEEDED, usageReport, "N/A", 0.53789f, "YARN",
null, null, false, Priority.newInstance(0), "high-mem", "high-mem"); null, null, false, Priority.newInstance(0), "high-mem", "high-mem");
newApplicationReport.setLogAggregationStatus(LogAggregationStatus.SUCCEEDED); newApplicationReport.setLogAggregationStatus(LogAggregationStatus.SUCCEEDED);
@ -383,7 +383,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport = ApplicationReport.newInstance( ApplicationReport newApplicationReport = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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, FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null,
Sets.newHashSet("tag1", "tag3"), false, Priority.UNDEFINED, "", ""); Sets.newHashSet("tag1", "tag3"), false, Priority.UNDEFINED, "", "");
List<ApplicationReport> applicationReports = List<ApplicationReport> applicationReports =
@ -394,7 +394,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance( ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 2), applicationId2, ApplicationAttemptId.newInstance(applicationId2, 2),
"user2", "queue2", "appname2", "host2", 125, null, "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", FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.63789f, "NON-YARN",
null, Sets.newHashSet("tag2", "tag3"), false, Priority.UNDEFINED, null, Sets.newHashSet("tag2", "tag3"), false, Priority.UNDEFINED,
"", ""); "", "");
@ -404,7 +404,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport3 = ApplicationReport.newInstance( ApplicationReport newApplicationReport3 = ApplicationReport.newInstance(
applicationId3, ApplicationAttemptId.newInstance(applicationId3, 3), applicationId3, ApplicationAttemptId.newInstance(applicationId3, 3),
"user3", "queue3", "appname3", "host3", 126, null, "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", FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.73789f, "MAPREDUCE",
null, Sets.newHashSet("tag1", "tag4"), false, Priority.UNDEFINED, null, Sets.newHashSet("tag1", "tag4"), false, Priority.UNDEFINED,
"", ""); "", "");
@ -414,7 +414,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport4 = ApplicationReport.newInstance( ApplicationReport newApplicationReport4 = ApplicationReport.newInstance(
applicationId4, ApplicationAttemptId.newInstance(applicationId4, 4), applicationId4, ApplicationAttemptId.newInstance(applicationId4, 4),
"user4", "queue4", "appname4", "host4", 127, null, "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, FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.83789f,
"NON-MAPREDUCE", null, Sets.newHashSet("tag1"), false, "NON-MAPREDUCE", null, Sets.newHashSet("tag1"), false,
Priority.UNDEFINED, "", ""); Priority.UNDEFINED, "", "");
@ -424,7 +424,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport5 = ApplicationReport.newInstance( ApplicationReport newApplicationReport5 = ApplicationReport.newInstance(
applicationId5, ApplicationAttemptId.newInstance(applicationId5, 5), applicationId5, ApplicationAttemptId.newInstance(applicationId5, 5),
"user5", "queue5", "appname5", "host5", 128, null, "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, FinalApplicationStatus.KILLED, null, "N/A", 0.93789f, "HIVE", null,
Sets.newHashSet("tag2", "tag4"), false, Priority.UNDEFINED, "", ""); Sets.newHashSet("tag2", "tag4"), false, Priority.UNDEFINED, "", "");
applicationReports.add(newApplicationReport5); applicationReports.add(newApplicationReport5);
@ -433,7 +433,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport6 = ApplicationReport.newInstance( ApplicationReport newApplicationReport6 = ApplicationReport.newInstance(
applicationId6, ApplicationAttemptId.newInstance(applicationId6, 6), applicationId6, ApplicationAttemptId.newInstance(applicationId6, 6),
"user6", "queue6", "appname6", "host6", 129, null, "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", FinalApplicationStatus.KILLED, null, "N/A", 0.99789f, "PIG",
null, new HashSet<String>(), false, Priority.UNDEFINED, "", ""); null, new HashSet<String>(), false, Priority.UNDEFINED, "", "");
applicationReports.add(newApplicationReport6); applicationReports.add(newApplicationReport6);
@ -1007,7 +1007,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance( ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn( when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
newApplicationReport2); newApplicationReport2);
@ -1020,7 +1020,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport = ApplicationReport.newInstance( ApplicationReport newApplicationReport = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn( when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
newApplicationReport); newApplicationReport);
@ -1059,12 +1059,12 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport1 = ApplicationReport.newInstance( ApplicationReport newApplicationReport1 = ApplicationReport.newInstance(
applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1), applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance( ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1), applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.34344f, "YARN", null);
when(client.getApplicationReport(applicationId1)).thenReturn( when(client.getApplicationReport(applicationId1)).thenReturn(
newApplicationReport1); newApplicationReport1);
@ -1084,12 +1084,12 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport3 = ApplicationReport.newInstance( ApplicationReport newApplicationReport3 = ApplicationReport.newInstance(
applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1), applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
ApplicationReport newApplicationReport4 = ApplicationReport.newInstance( ApplicationReport newApplicationReport4 = ApplicationReport.newInstance(
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1), applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
when(client.getApplicationReport(applicationId1)).thenReturn( when(client.getApplicationReport(applicationId1)).thenReturn(
newApplicationReport3); newApplicationReport3);
@ -1127,7 +1127,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport5 = ApplicationReport.newInstance( ApplicationReport newApplicationReport5 = ApplicationReport.newInstance(
applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1), applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
when(client.getApplicationReport(applicationId1)).thenReturn( when(client.getApplicationReport(applicationId1)).thenReturn(
newApplicationReport5); newApplicationReport5);
@ -1154,12 +1154,12 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport5 = ApplicationReport.newInstance( ApplicationReport newApplicationReport5 = ApplicationReport.newInstance(
applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1), applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
ApplicationReport newApplicationReport6 = ApplicationReport.newInstance( ApplicationReport newApplicationReport6 = ApplicationReport.newInstance(
applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1), applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
when(client.getApplicationReport(applicationId1)).thenReturn( when(client.getApplicationReport(applicationId1)).thenReturn(
newApplicationReport5); newApplicationReport5);
@ -1182,7 +1182,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance( ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn( when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
newApplicationReport2); newApplicationReport2);
@ -1197,7 +1197,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport = ApplicationReport.newInstance( ApplicationReport newApplicationReport = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn( when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
newApplicationReport); newApplicationReport);
@ -1232,7 +1232,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport2 = ApplicationReport.newInstance( ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
when(client.getApplicationReport(any(ApplicationId.class))) when(client.getApplicationReport(any(ApplicationId.class)))
.thenReturn(newApplicationReport2); .thenReturn(newApplicationReport2);
@ -1247,7 +1247,7 @@ public class TestYarnCLI {
ApplicationReport newApplicationReport = ApplicationReport.newInstance( ApplicationReport newApplicationReport = ApplicationReport.newInstance(
applicationId, ApplicationAttemptId.newInstance(applicationId, 1), applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
"user", "queue", "appname", "host", 124, null, "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); FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
when(client.getApplicationReport(any(ApplicationId.class))) when(client.getApplicationReport(any(ApplicationId.class)))
.thenReturn(newApplicationReport); .thenReturn(newApplicationReport);
@ -2015,7 +2015,7 @@ public class TestYarnCLI {
ApplicationReport.newInstance(applicationId, ApplicationReport.newInstance(applicationId,
ApplicationAttemptId.newInstance(applicationId, 1), "user", ApplicationAttemptId.newInstance(applicationId, 1), "user",
"queue", "appname", "host", 124, null, "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", FinalApplicationStatus.UNDEFINED, null, "N/A", 0.53789f, "YARN",
null); null);
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn( when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(

View File

@ -220,6 +220,17 @@ public class ApplicationReportPBImpl extends ApplicationReport {
return p.getStartTime(); 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 @Override
public long getFinishTime() { public long getFinishTime() {
ApplicationReportProtoOrBuilder p = viaProto ? proto : builder; ApplicationReportProtoOrBuilder p = viaProto ? proto : builder;

View File

@ -58,7 +58,7 @@ public class TestApplicatonReport {
ApplicationReport appReport = ApplicationReport appReport =
ApplicationReport.newInstance(appId, appAttemptId, "user", "queue", ApplicationReport.newInstance(appId, appAttemptId, "user", "queue",
"appname", "host", 124, null, YarnApplicationState.FINISHED, "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, "N/A", 0.53789f, YarnConfiguration.DEFAULT_APPLICATION_TYPE, null,
null, false, Priority.newInstance(0),"",""); null, false, Priority.newInstance(0),"","");
return appReport; return appReport;

View File

@ -137,7 +137,7 @@ public class ApplicationHistoryManagerImpl extends AbstractService implements
currentApplicationAttemptId, appHistory.getUser(), appHistory.getQueue(), currentApplicationAttemptId, appHistory.getUser(), appHistory.getQueue(),
appHistory.getApplicationName(), host, rpcPort, null, appHistory.getApplicationName(), host, rpcPort, null,
appHistory.getYarnApplicationState(), appHistory.getDiagnosticsInfo(), appHistory.getYarnApplicationState(), appHistory.getDiagnosticsInfo(),
trackingUrl, appHistory.getStartTime(), appHistory.getFinishTime(), trackingUrl, appHistory.getStartTime(), 0, appHistory.getFinishTime(),
appHistory.getFinalApplicationStatus(), null, "", 100, appHistory.getFinalApplicationStatus(), null, "", 100,
appHistory.getApplicationType(), null); appHistory.getApplicationType(), null);
} }

View File

@ -391,7 +391,7 @@ public class BuilderUtils {
ApplicationId applicationId, ApplicationAttemptId applicationAttemptId, ApplicationId applicationId, ApplicationAttemptId applicationAttemptId,
String user, String queue, String name, String host, int rpcPort, String user, String queue, String name, String host, int rpcPort,
Token clientToAMToken, YarnApplicationState state, String diagnostics, Token clientToAMToken, YarnApplicationState state, String diagnostics,
String url, long startTime, long finishTime, String url, long startTime, long launchTime, long finishTime,
FinalApplicationStatus finalStatus, FinalApplicationStatus finalStatus,
ApplicationResourceUsageReport appResources, String origTrackingUrl, ApplicationResourceUsageReport appResources, String origTrackingUrl,
float progress, String appType, Token amRmToken, Set<String> tags, float progress, String appType, Token amRmToken, Set<String> tags,
@ -410,6 +410,7 @@ public class BuilderUtils {
report.setDiagnostics(diagnostics); report.setDiagnostics(diagnostics);
report.setTrackingUrl(url); report.setTrackingUrl(url);
report.setStartTime(startTime); report.setStartTime(startTime);
report.setLaunchTime(launchTime);
report.setFinishTime(finishTime); report.setFinishTime(finishTime);
report.setFinalApplicationStatus(finalStatus); report.setFinalApplicationStatus(finalStatus);
report.setApplicationResourceUsageReport(appResources); report.setApplicationResourceUsageReport(appResources);

View File

@ -242,10 +242,9 @@ public class AppBlock extends HtmlBlock {
.__("FinalStatus Reported by AM:", .__("FinalStatus Reported by AM:",
clairfyAppFinalStatus(app.getFinalAppStatus())) clairfyAppFinalStatus(app.getFinalAppStatus()))
.__("Started:", Times.format(app.getStartedTime())) .__("Started:", Times.format(app.getStartedTime()))
.__( .__("Launched:", Times.format(app.getLaunchTime()))
"Elapsed:", .__("Finished:", Times.format(app.getFinishedTime()))
StringUtils.formatTime(Times.elapsed(app.getStartedTime(), .__("Elapsed:", StringUtils.formatTime(app.getElapsedTime()))
app.getFinishedTime())))
.__( .__(
"Tracking URL:", "Tracking URL:",
app.getTrackingUrl() == null app.getTrackingUrl() == null

View File

@ -150,7 +150,9 @@ public class AppsBlock extends HtmlBlock {
html.table("#apps").thead().tr().th(".id", "ID").th(".user", "User") html.table("#apps").thead().tr().th(".id", "ID").th(".user", "User")
.th(".name", "Name").th(".type", "Application Type") .th(".name", "Name").th(".type", "Application Type")
.th(".queue", "Queue").th(".priority", "Application Priority") .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(".state", "State").th(".finalstatus", "FinalStatus")
.th(".progress", "Progress").th(".ui", "Tracking UI").__().__().tbody(); .th(".progress", "Progress").th(".ui", "Tracking UI").__().__().tbody();
@ -188,6 +190,7 @@ public class AppsBlock extends HtmlBlock {
.getQueue()))).append("\",\"").append(String .getQueue()))).append("\",\"").append(String
.valueOf(app.getPriority())) .valueOf(app.getPriority()))
.append("\",\"").append(app.getStartedTime()) .append("\",\"").append(app.getStartedTime())
.append("\",\"").append(app.getLaunchTime())
.append("\",\"").append(app.getFinishedTime()) .append("\",\"").append(app.getFinishedTime())
.append("\",\"") .append("\",\"")
.append(app.getAppState() == null ? UNAVAILABLE : app.getAppState()) .append(app.getAppState() == null ? UNAVAILABLE : app.getAppState())

View File

@ -51,7 +51,7 @@ public class WebPageUtils {
sb.append("[\n") sb.append("[\n")
.append("{'sType':'natural', 'aTargets': [0]") .append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }") .append(", 'mRender': parseHadoopID }")
.append("\n, {'sType':'numeric', 'aTargets': [6, 7]") .append("\n, {'sType':'numeric', 'aTargets': [6, 7, 8]")
.append(", 'mRender': renderHadoopDate }") .append(", 'mRender': renderHadoopDate }")
.append("\n, {'sType':'numeric', bSearchable:false, 'aTargets':"); .append("\n, {'sType':'numeric', bSearchable:false, 'aTargets':");
if (isFairSchedulerPage) { if (isFairSchedulerPage) {

View File

@ -55,6 +55,7 @@ public class AppInfo {
protected FinalApplicationStatus finalAppStatus; protected FinalApplicationStatus finalAppStatus;
protected long submittedTime; protected long submittedTime;
protected long startedTime; protected long startedTime;
private long launchTime;
protected long finishedTime; protected long finishedTime;
protected long elapsedTime; protected long elapsedTime;
protected String applicationTags; protected String applicationTags;
@ -88,6 +89,7 @@ public class AppInfo {
originalTrackingUrl = app.getOriginalTrackingUrl(); originalTrackingUrl = app.getOriginalTrackingUrl();
submittedTime = app.getStartTime(); submittedTime = app.getStartTime();
startedTime = app.getStartTime(); startedTime = app.getStartTime();
launchTime = app.getLaunchTime();
finishedTime = app.getFinishTime(); finishedTime = app.getFinishTime();
elapsedTime = Times.elapsed(startedTime, finishedTime); elapsedTime = Times.elapsed(startedTime, finishedTime);
finalAppStatus = app.getFinalApplicationStatus(); finalAppStatus = app.getFinalApplicationStatus();
@ -198,6 +200,10 @@ public class AppInfo {
return submittedTime; return submittedTime;
} }
public long getLaunchTime() {
return launchTime;
}
public long getStartedTime() { public long getStartedTime() {
return startedTime; return startedTime;
} }

View File

@ -303,7 +303,7 @@ public class AMLauncher implements Runnable {
LOG.info("Launching master" + application.getAppAttemptId()); LOG.info("Launching master" + application.getAppAttemptId());
launch(); launch();
handler.handle(new RMAppAttemptEvent(application.getAppAttemptId(), handler.handle(new RMAppAttemptEvent(application.getAppAttemptId(),
RMAppAttemptEventType.LAUNCHED)); RMAppAttemptEventType.LAUNCHED, System.currentTimeMillis()));
} catch(Exception ie) { } catch(Exception ie) {
String message = "Error launching " + application.getAppAttemptId() String message = "Error launching " + application.getAppAttemptId()
+ ". Got exception: " + StringUtils.stringifyException(ie); + ". Got exception: " + StringUtils.stringifyException(ie);

View File

@ -47,7 +47,8 @@ public abstract class ApplicationStateData {
public static ApplicationStateData newInstance(long submitTime, public static ApplicationStateData newInstance(long submitTime,
long startTime, String user, long startTime, String user,
ApplicationSubmissionContext submissionContext, RMAppState state, ApplicationSubmissionContext submissionContext, RMAppState state,
String diagnostics, long finishTime, CallerContext callerContext) { String diagnostics, long launchTime, long finishTime,
CallerContext callerContext) {
ApplicationStateData appState = Records.newRecord(ApplicationStateData.class); ApplicationStateData appState = Records.newRecord(ApplicationStateData.class);
appState.setSubmitTime(submitTime); appState.setSubmitTime(submitTime);
appState.setStartTime(startTime); appState.setStartTime(startTime);
@ -55,6 +56,7 @@ public abstract class ApplicationStateData {
appState.setApplicationSubmissionContext(submissionContext); appState.setApplicationSubmissionContext(submissionContext);
appState.setState(state); appState.setState(state);
appState.setDiagnostics(diagnostics); appState.setDiagnostics(diagnostics);
appState.setLaunchTime(launchTime);
appState.setFinishTime(finishTime); appState.setFinishTime(finishTime);
appState.setCallerContext(callerContext); appState.setCallerContext(callerContext);
return appState; return appState;
@ -63,7 +65,8 @@ public abstract class ApplicationStateData {
public static ApplicationStateData newInstance(long submitTime, public static ApplicationStateData newInstance(long submitTime,
long startTime, String user, long startTime, String user,
ApplicationSubmissionContext submissionContext, RMAppState state, ApplicationSubmissionContext submissionContext, RMAppState state,
String diagnostics, long finishTime, CallerContext callerContext, String diagnostics, long launchTime, long finishTime,
CallerContext callerContext,
Map<ApplicationTimeoutType, Long> applicationTimeouts) { Map<ApplicationTimeoutType, Long> applicationTimeouts) {
ApplicationStateData appState = ApplicationStateData appState =
Records.newRecord(ApplicationStateData.class); Records.newRecord(ApplicationStateData.class);
@ -73,6 +76,7 @@ public abstract class ApplicationStateData {
appState.setApplicationSubmissionContext(submissionContext); appState.setApplicationSubmissionContext(submissionContext);
appState.setState(state); appState.setState(state);
appState.setDiagnostics(diagnostics); appState.setDiagnostics(diagnostics);
appState.setLaunchTime(launchTime);
appState.setFinishTime(finishTime); appState.setFinishTime(finishTime);
appState.setCallerContext(callerContext); appState.setCallerContext(callerContext);
appState.setApplicationTimeouts(applicationTimeouts); appState.setApplicationTimeouts(applicationTimeouts);
@ -82,7 +86,7 @@ public abstract class ApplicationStateData {
public static ApplicationStateData newInstance(long submitTime, public static ApplicationStateData newInstance(long submitTime,
long startTime, ApplicationSubmissionContext context, String user, long startTime, ApplicationSubmissionContext context, String user,
CallerContext callerContext) { CallerContext callerContext) {
return newInstance(submitTime, startTime, user, context, null, "", 0, return newInstance(submitTime, startTime, user, context, null, "", 0, 0,
callerContext); callerContext);
} }
@ -136,6 +140,20 @@ public abstract class ApplicationStateData {
@Unstable @Unstable
public abstract void setStartTime(long startTime); 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 * The application submitter
*/ */

View File

@ -120,6 +120,19 @@ public class ApplicationStateDataPBImpl extends ApplicationStateData {
builder.setStartTime(startTime); 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 @Override
public String getUser() { public String getUser() {
ApplicationStateDataProtoOrBuilder p = viaProto ? proto : builder; ApplicationStateDataProtoOrBuilder p = viaProto ? proto : builder;

View File

@ -180,7 +180,15 @@ public interface RMApp extends EventHandler<RMAppEvent> {
* @return the submit time of the application. * @return the submit time of the application.
*/ */
long getSubmitTime(); 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. * The tracking url for the application master.
* @return the tracking url for the application master. * @return the tracking url for the application master.

View File

@ -37,6 +37,12 @@ public class RMAppEvent extends AbstractEvent<RMAppEventType>{
this.diagnosticMsg = diagnostic; this.diagnosticMsg = diagnostic;
} }
public RMAppEvent(ApplicationId appId, RMAppEventType type, long timeStamp) {
super(type, timeStamp);
this.appId = appId;
this.diagnosticMsg = "";
}
public ApplicationId getApplicationId() { public ApplicationId getApplicationId() {
return this.appId; return this.appId;
} }

View File

@ -37,6 +37,7 @@ public enum RMAppEventType {
ATTEMPT_FAILED, ATTEMPT_FAILED,
ATTEMPT_KILLED, ATTEMPT_KILLED,
NODE_UPDATE, NODE_UPDATE,
ATTEMPT_LAUNCHED,
// Source: Container and ResourceTracker // Source: Container and ResourceTracker
APP_RUNNING_ON_NODE, APP_RUNNING_ON_NODE,

View File

@ -164,6 +164,7 @@ public class RMAppImpl implements RMApp, Recoverable {
// Mutable fields // Mutable fields
private long startTime; private long startTime;
private long launchTime = 0;
private long finishTime = 0; private long finishTime = 0;
private long storedFinishTime = 0; private long storedFinishTime = 0;
private int firstAttemptIdInStateStore = 1; private int firstAttemptIdInStateStore = 1;
@ -290,6 +291,10 @@ public class RMAppImpl implements RMApp, Recoverable {
.addTransition(RMAppState.ACCEPTED, RMAppState.ACCEPTED, .addTransition(RMAppState.ACCEPTED, RMAppState.ACCEPTED,
RMAppEventType.APP_RUNNING_ON_NODE, RMAppEventType.APP_RUNNING_ON_NODE,
new AppRunningOnNodeTransition()) 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 // Transitions from RUNNING state
.addTransition(RMAppState.RUNNING, RMAppState.RUNNING, .addTransition(RMAppState.RUNNING, RMAppState.RUNNING,
@ -784,9 +789,9 @@ public class RMAppImpl implements RMApp, Recoverable {
this.applicationId, currentApplicationAttemptId, this.user, this.applicationId, currentApplicationAttemptId, this.user,
this.queue, this.name, host, rpcPort, clientToAMToken, this.queue, this.name, host, rpcPort, clientToAMToken,
createApplicationState(), diags, trackingUrl, this.startTime, createApplicationState(), diags, trackingUrl, this.startTime,
this.finishTime, finishState, appUsageReport, origTrackingUrl, this.launchTime, this.finishTime, finishState, appUsageReport,
progress, this.applicationType, amrmToken, applicationTags, origTrackingUrl, progress, this.applicationType, amrmToken,
this.getApplicationPriority()); applicationTags, this.getApplicationPriority());
report.setLogAggregationStatus(logAggregationStatus); report.setLogAggregationStatus(logAggregationStatus);
report.setUnmanagedApp(submissionContext.getUnmanagedAM()); report.setUnmanagedApp(submissionContext.getUnmanagedAM());
report.setAppNodeLabelExpression(getAppNodeLabelExpression()); report.setAppNodeLabelExpression(getAppNodeLabelExpression());
@ -839,6 +844,17 @@ public class RMAppImpl implements RMApp, Recoverable {
} }
} }
@Override
public long getLaunchTime() {
this.readLock.lock();
try {
return this.launchTime;
} finally {
this.readLock.unlock();
}
}
@Override @Override
public long getSubmitTime() { public long getSubmitTime() {
return this.submitTime; return this.submitTime;
@ -936,6 +952,7 @@ public class RMAppImpl implements RMApp, Recoverable {
.getDiagnostics()); .getDiagnostics());
this.storedFinishTime = appState.getFinishTime(); this.storedFinishTime = appState.getFinishTime();
this.startTime = appState.getStartTime(); this.startTime = appState.getStartTime();
this.launchTime = appState.getLaunchTime();
this.callerContext = appState.getCallerContext(); this.callerContext = appState.getCallerContext();
this.applicationTimeouts = appState.getApplicationTimeouts(); this.applicationTimeouts = appState.getApplicationTimeouts();
// If interval > 0, some attempts might have been deleted. // If interval > 0, some attempts might have been deleted.
@ -1038,6 +1055,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 { private static final class AppRunningOnNodeTransition extends RMAppTransition {
public void transition(RMAppImpl app, RMAppEvent event) { public void transition(RMAppImpl app, RMAppEvent event) {
RMAppRunningOnNodeEvent nodeAddedEvent = (RMAppRunningOnNodeEvent) event; RMAppRunningOnNodeEvent nodeAddedEvent = (RMAppRunningOnNodeEvent) event;
@ -1297,7 +1329,8 @@ public class RMAppImpl implements RMApp, Recoverable {
ApplicationStateData appState = ApplicationStateData appState =
ApplicationStateData.newInstance(this.submitTime, this.startTime, ApplicationStateData.newInstance(this.submitTime, this.startTime,
this.user, this.submissionContext, this.user, this.submissionContext,
stateToBeStored, diags, this.storedFinishTime, this.callerContext); stateToBeStored, diags, this.launchTime, this.storedFinishTime,
this.callerContext);
appState.setApplicationTimeouts(this.applicationTimeouts); appState.setApplicationTimeouts(this.applicationTimeouts);
this.rmContext.getStateStore().updateApplicationState(appState); this.rmContext.getStateStore().updateApplicationState(appState);
} }

View File

@ -38,6 +38,13 @@ public class RMAppAttemptEvent extends AbstractEvent<RMAppAttemptEventType> {
this.diagnosticMsg = diagnostics; this.diagnosticMsg = diagnostics;
} }
public RMAppAttemptEvent(ApplicationAttemptId appAttemptId,
RMAppAttemptEventType type, long timeStamp) {
super(type, timeStamp);
this.appAttemptId = appAttemptId;
this.diagnosticMsg = "";
}
public ApplicationAttemptId getApplicationAttemptId() { public ApplicationAttemptId getApplicationAttemptId() {
return this.appAttemptId; return this.appAttemptId;
} }

View File

@ -1557,7 +1557,9 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable {
appAttempt.launchAMStartTime; appAttempt.launchAMStartTime;
ClusterMetrics.getMetrics().addAMLaunchDelay(delay); ClusterMetrics.getMetrics().addAMLaunchDelay(delay);
} }
appAttempt.eventHandler.handle(
new RMAppEvent(appAttempt.getAppAttemptId().getApplicationId(),
RMAppEventType.ATTEMPT_LAUNCHED, event.getTimestamp()));
appAttempt appAttempt
.updateAMLaunchDiagnostics(AMState.LAUNCHED.getDiagnosticMessage()); .updateAMLaunchDiagnostics(AMState.LAUNCHED.getDiagnosticMessage());
// Register with AMLivelinessMonitor // Register with AMLivelinessMonitor

View File

@ -89,6 +89,7 @@ public class FairSchedulerAppsBlock extends HtmlBlock {
th(".queue", "Queue"). th(".queue", "Queue").
th(".fairshare", "Fair Share"). th(".fairshare", "Fair Share").
th(".starttime", "StartTime"). th(".starttime", "StartTime").
th(".launchTime", "LaunchTime").
th(".finishtime", "FinishTime"). th(".finishtime", "FinishTime").
th(".state", "State"). th(".state", "State").
th(".finalstatus", "FinalStatus"). th(".finalstatus", "FinalStatus").
@ -135,6 +136,7 @@ public class FairSchedulerAppsBlock extends HtmlBlock {
appInfo.getQueue()))).append("\",\"") appInfo.getQueue()))).append("\",\"")
.append(fairShare).append("\",\"") .append(fairShare).append("\",\"")
.append(appInfo.getStartTime()).append("\",\"") .append(appInfo.getStartTime()).append("\",\"")
.append(appInfo.getLaunchTime()).append("\",\"")
.append(appInfo.getFinishTime()).append("\",\"") .append(appInfo.getFinishTime()).append("\",\"")
.append(appInfo.getState()).append("\",\"") .append(appInfo.getState()).append("\",\"")
.append(appInfo.getFinalStatus()).append("\",\"") .append(appInfo.getFinalStatus()).append("\",\"")

View File

@ -62,6 +62,7 @@ public class RMAppsBlock extends AppsBlock {
.th(".name", "Name").th(".type", "Application Type") .th(".name", "Name").th(".type", "Application Type")
.th(".queue", "Queue").th(".priority", "Application Priority") .th(".queue", "Queue").th(".priority", "Application Priority")
.th(".starttime", "StartTime") .th(".starttime", "StartTime")
.th("launchtime", "LaunchTime")
.th(".finishtime", "FinishTime").th(".state", "State") .th(".finishtime", "FinishTime").th(".state", "State")
.th(".finalstatus", "FinalStatus") .th(".finalstatus", "FinalStatus")
.th(".runningcontainer", "Running Containers") .th(".runningcontainer", "Running Containers")
@ -134,6 +135,7 @@ public class RMAppsBlock extends AppsBlock {
.getQueue()))).append("\",\"").append(String .getQueue()))).append("\",\"").append(String
.valueOf(app.getPriority())) .valueOf(app.getPriority()))
.append("\",\"").append(app.getStartedTime()) .append("\",\"").append(app.getStartedTime())
.append("\",\"").append(app.getLaunchTime())
.append("\",\"").append(app.getFinishedTime()) .append("\",\"").append(app.getFinishedTime())
.append("\",\"") .append("\",\"")
.append(app.getAppState() == null ? UNAVAILABLE : app.getAppState()) .append(app.getAppState() == null ? UNAVAILABLE : app.getAppState())

View File

@ -87,6 +87,7 @@ public class AppInfo {
// these are only allowed if acls allow // these are only allowed if acls allow
protected long startedTime; protected long startedTime;
private long launchTime;
protected long finishedTime; protected long finishedTime;
protected long elapsedTime; protected long elapsedTime;
protected String amContainerLogs; protected String amContainerLogs;
@ -181,6 +182,7 @@ public class AppInfo {
this.clusterId = ResourceManager.getClusterTimeStamp(); this.clusterId = ResourceManager.getClusterTimeStamp();
if (hasAccess) { if (hasAccess) {
this.startedTime = app.getStartTime(); this.startedTime = app.getStartTime();
this.launchTime = app.getLaunchTime();
this.finishedTime = app.getFinishTime(); this.finishedTime = app.getFinishTime();
this.elapsedTime = this.elapsedTime =
Times.elapsed(app.getStartTime(), app.getFinishTime()); Times.elapsed(app.getStartTime(), app.getFinishTime());
@ -394,6 +396,10 @@ public class AppInfo {
return this.startedTime; return this.startedTime;
} }
public long getLaunchTime() {
return this.launchTime;
}
public long getFinishTime() { public long getFinishTime() {
return this.finishedTime; return this.finishedTime;
} }

View File

@ -70,6 +70,7 @@ message ApplicationStateDataProto {
optional int64 finish_time = 7; optional int64 finish_time = 7;
optional hadoop.common.RPCCallerContextProto caller_context = 8; optional hadoop.common.RPCCallerContextProto caller_context = 8;
repeated ApplicationTimeoutMapProto application_timeouts = 9; repeated ApplicationTimeoutMapProto application_timeouts = 9;
optional int64 launch_time = 10;
} }
message ApplicationAttemptStateDataProto { message ApplicationAttemptStateDataProto {

View File

@ -92,7 +92,12 @@ public abstract class MockAsm extends MockApps {
public long getSubmitTime() { public long getSubmitTime() {
throw new UnsupportedOperationException("Not supported yet."); throw new UnsupportedOperationException("Not supported yet.");
} }
@Override
public long getLaunchTime() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override @Override
public long getFinishTime() { public long getFinishTime() {
throw new UnsupportedOperationException("Not supported yet."); throw new UnsupportedOperationException("Not supported yet.");
@ -272,6 +277,7 @@ public abstract class MockAsm extends MockApps {
final String name = newAppName(); final String name = newAppName();
final String queue = newQueue(); final String queue = newQueue();
final long start = 123456 + i * 1000; final long start = 123456 + i * 1000;
final long launch = start + i * 100;
final long finish = 234567 + i * 1000; final long finish = 234567 + i * 1000;
final String type = YarnConfiguration.DEFAULT_APPLICATION_TYPE; final String type = YarnConfiguration.DEFAULT_APPLICATION_TYPE;
YarnApplicationState[] allStates = YarnApplicationState.values(); YarnApplicationState[] allStates = YarnApplicationState.values();
@ -307,6 +313,11 @@ public abstract class MockAsm extends MockApps {
return start; return start;
} }
@Override
public long getLaunchTime() {
return launch;
}
@Override @Override
public long getFinishTime() { public long getFinishTime() {
return finish; return finish;
@ -357,7 +368,7 @@ public abstract class MockAsm extends MockApps {
ApplicationReport report = ApplicationReport.newInstance( ApplicationReport report = ApplicationReport.newInstance(
getApplicationId(), appAttemptId, getUser(), getQueue(), getApplicationId(), appAttemptId, getUser(), getQueue(),
getName(), null, 0, null, null, getDiagnostics().toString(), getName(), null, 0, null, null, getDiagnostics().toString(),
getTrackingUrl(), getStartTime(), getFinishTime(), getTrackingUrl(), getLaunchTime(), getStartTime(), getFinishTime(),
getFinalApplicationStatus(), usageReport , null, getProgress(), getFinalApplicationStatus(), usageReport , null, getProgress(),
type, null); type, null);
return report; return report;

View File

@ -358,7 +358,7 @@ public class RMStateStoreTestBase {
ApplicationStateData.newInstance(appState.getSubmitTime(), ApplicationStateData.newInstance(appState.getSubmitTime(),
appState.getStartTime(), appState.getUser(), appState.getStartTime(), appState.getUser(),
appState.getApplicationSubmissionContext(), RMAppState.FINISHED, appState.getApplicationSubmissionContext(), RMAppState.FINISHED,
"appDiagnostics", 1234, appState.getCallerContext()); "appDiagnostics", 123, 1234, appState.getCallerContext());
appState2.attempts.putAll(appState.attempts); appState2.attempts.putAll(appState.attempts);
store.updateApplicationState(appState2); store.updateApplicationState(appState2);
@ -384,7 +384,7 @@ public class RMStateStoreTestBase {
ApplicationStateData dummyApp = ApplicationStateData dummyApp =
ApplicationStateData.newInstance(appState.getSubmitTime(), ApplicationStateData.newInstance(appState.getSubmitTime(),
appState.getStartTime(), appState.getUser(), dummyContext, appState.getStartTime(), appState.getUser(), dummyContext,
RMAppState.FINISHED, "appDiagnostics", 1234, null); RMAppState.FINISHED, "appDiagnostics", 123, 1234, null);
store.updateApplicationState(dummyApp); store.updateApplicationState(dummyApp);
ApplicationAttemptId dummyAttemptId = ApplicationAttemptId dummyAttemptId =

View File

@ -407,7 +407,7 @@ public class TestFSRMStateStore extends RMStateStoreTestBase {
store.storeApplicationStateInternal( store.storeApplicationStateInternal(
ApplicationId.newInstance(100L, 1), ApplicationId.newInstance(100L, 1),
ApplicationStateData.newInstance(111, 111, "user", null, ApplicationStateData.newInstance(111, 111, "user", null,
RMAppState.ACCEPTED, "diagnostics", 333, null)); RMAppState.ACCEPTED, "diagnostics", 222, 333, null));
} catch (Exception e) { } catch (Exception e) {
assertionFailedInThread.set(true); assertionFailedInThread.set(true);
e.printStackTrace(); e.printStackTrace();

View File

@ -790,7 +790,7 @@ public class TestZKRMStateStore extends RMStateStoreTestBase {
long finishTime, boolean isFinished) { long finishTime, boolean isFinished) {
return ApplicationStateData.newInstance(submitTime, startTime, "test", return ApplicationStateData.newInstance(submitTime, startTime, "test",
ctxt, isFinished ? RMAppState.FINISHED : null, isFinished ? ctxt, isFinished ? RMAppState.FINISHED : null, isFinished ?
"appDiagnostics" : "", isFinished ? finishTime : 0, null); "appDiagnostics" : "", 0, isFinished ? finishTime : 0, null);
} }
private static ApplicationAttemptStateData createFinishedAttempt( private static ApplicationAttemptStateData createFinishedAttempt(

View File

@ -57,6 +57,7 @@ public class MockRMApp implements RMApp {
String name = MockApps.newAppName(); String name = MockApps.newAppName();
String queue = MockApps.newQueue(); String queue = MockApps.newQueue();
long start = System.currentTimeMillis() - (int) (Math.random() * DT); long start = System.currentTimeMillis() - (int) (Math.random() * DT);
private long launch = start;
long submit = start - (int) (Math.random() * DT); long submit = start - (int) (Math.random() * DT);
long finish = 0; long finish = 0;
RMAppState state = RMAppState.NEW; RMAppState state = RMAppState.NEW;
@ -194,6 +195,11 @@ public class MockRMApp implements RMApp {
return submit; return submit;
} }
@Override
public long getLaunchTime() {
return launch;
}
public void setStartTime(long time) { public void setStartTime(long time) {
this.start = time; this.start = time;
} }

View File

@ -1239,7 +1239,7 @@ public class TestRMAppTransitions {
ApplicationStateData appState = ApplicationStateData appState =
ApplicationStateData.newInstance(app.getSubmitTime(), app.getStartTime(), ApplicationStateData.newInstance(app.getSubmitTime(), app.getStartTime(),
app.getUser(), app.getApplicationSubmissionContext(), rmAppState, app.getUser(), app.getApplicationSubmissionContext(), rmAppState,
null, app.getFinishTime(), null); null, app.getLaunchTime(), app.getFinishTime(), null);
applicationState.put(app.getApplicationId(), appState); applicationState.put(app.getApplicationId(), appState);
} }

View File

@ -257,7 +257,7 @@ public class TestRMWebApp {
app.getName(), (String) null, 0, (Token) null, app.getName(), (String) null, 0, (Token) null,
app.createApplicationState(), app.createApplicationState(),
app.getDiagnostics().toString(), (String) null, app.getDiagnostics().toString(), (String) null,
app.getStartTime(), app.getFinishTime(), app.getStartTime(), app.getLaunchTime(), app.getFinishTime(),
app.getFinalApplicationStatus(), app.getFinalApplicationStatus(),
(ApplicationResourceUsageReport) null, app.getTrackingUrl(), (ApplicationResourceUsageReport) null, app.getTrackingUrl(),
app.getProgress(), app.getApplicationType(), (Token) null); app.getProgress(), app.getApplicationType(), (Token) null);

View File

@ -1553,6 +1553,7 @@ public class TestRMWebServicesApps extends JerseyTestBase {
WebServicesTestUtils.getXmlString(element, "diagnostics"), WebServicesTestUtils.getXmlString(element, "diagnostics"),
WebServicesTestUtils.getXmlLong(element, "clusterId"), WebServicesTestUtils.getXmlLong(element, "clusterId"),
WebServicesTestUtils.getXmlLong(element, "startedTime"), WebServicesTestUtils.getXmlLong(element, "startedTime"),
WebServicesTestUtils.getXmlLong(element, "launchTime"),
WebServicesTestUtils.getXmlLong(element, "finishedTime"), WebServicesTestUtils.getXmlLong(element, "finishedTime"),
WebServicesTestUtils.getXmlLong(element, "elapsedTime"), WebServicesTestUtils.getXmlLong(element, "elapsedTime"),
WebServicesTestUtils.getXmlString(element, "amHostHttpAddress"), WebServicesTestUtils.getXmlString(element, "amHostHttpAddress"),
@ -1603,7 +1604,7 @@ public class TestRMWebServicesApps extends JerseyTestBase {
public void verifyAppInfo(JSONObject info, RMApp app, boolean hasResourceReqs) public void verifyAppInfo(JSONObject info, RMApp app, boolean hasResourceReqs)
throws JSONException, Exception { throws JSONException, Exception {
int expectedNumberOfElements = 39 + (hasResourceReqs ? 2 : 0); int expectedNumberOfElements = 40 + (hasResourceReqs ? 2 : 0);
String appNodeLabelExpression = null; String appNodeLabelExpression = null;
String amNodeLabelExpression = null; String amNodeLabelExpression = null;
if (app.getApplicationSubmissionContext() if (app.getApplicationSubmissionContext()
@ -1629,8 +1630,10 @@ public class TestRMWebServicesApps extends JerseyTestBase {
info.getString("state"), info.getString("finalStatus"), info.getString("state"), info.getString("finalStatus"),
(float) info.getDouble("progress"), info.getString("trackingUI"), (float) info.getDouble("progress"), info.getString("trackingUI"),
info.getString("diagnostics"), info.getLong("clusterId"), info.getString("diagnostics"), info.getLong("clusterId"),
info.getLong("startedTime"), info.getLong("finishedTime"), info.getLong("startedTime"), info.getLong("launchTime"),
info.getLong("elapsedTime"), info.getString("amHostHttpAddress"), info.getLong("finishedTime"),
info.getLong("elapsedTime"),
info.getString("amHostHttpAddress"),
info.getString("amContainerLogs"), info.getInt("allocatedMB"), info.getString("amContainerLogs"), info.getInt("allocatedMB"),
info.getInt("allocatedVCores"), info.getInt("runningContainers"), info.getInt("allocatedVCores"), info.getInt("runningContainers"),
(float) info.getDouble("queueUsagePercentage"), (float) info.getDouble("queueUsagePercentage"),
@ -1653,8 +1656,9 @@ public class TestRMWebServicesApps extends JerseyTestBase {
public void verifyAppInfoGeneric(RMApp app, String id, String user, public void verifyAppInfoGeneric(RMApp app, String id, String user,
String name, String applicationType, String queue, int prioirty, String name, String applicationType, String queue, int prioirty,
String state, String finalStatus, float progress, String trackingUI, String state, String finalStatus, float progress, String trackingUI,
String diagnostics, long clusterId, long startedTime, long finishedTime, String diagnostics, long clusterId, long startedTime,
long elapsedTime, String amHostHttpAddress, String amContainerLogs, long launchTime, long finishedTime, long elapsedTime,
String amHostHttpAddress, String amContainerLogs,
int allocatedMB, int allocatedVCores, int numContainers, int allocatedMB, int allocatedVCores, int numContainers,
float queueUsagePerc, float clusterUsagePerc, float queueUsagePerc, float clusterUsagePerc,
int preemptedResourceMB, int preemptedResourceVCores, int preemptedResourceMB, int preemptedResourceVCores,