diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationReport.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationReport.java index ff4fb52..90e2bf1 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationReport.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationReport.java @@ -361,5 +361,16 @@ public static ApplicationReport newInstance(ApplicationId applicationId, @Public @Stable public abstract Token getAMRMToken(); - + + /** + * Get log aggregation status for the application + * @return Application's log aggregation status + */ + @Public + @Stable + public abstract String getLogAggregationStatus(); + + @Private + @Unstable + public abstract void setLogAggregationStatus(String logAggregationStatus); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto index 7781d65..26bd224 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto @@ -194,6 +194,7 @@ message ApplicationReportProto { optional string applicationType = 18; optional hadoop.common.TokenProto am_rm_token = 19; repeated string applicationTags = 20; + optional string log_aggregation_status = 21; } message ApplicationAttemptReportProto { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java index dd4a949..9b48441 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java @@ -530,6 +530,8 @@ private int printApplicationReport(String applicationId) } else { appReportStr.println("N/A"); } + appReportStr.print("\tLog Aggregation Status : "); + appReportStr.println(appReport.getLogAggregationStatus()); appReportStr.print("\tDiagnostics : "); appReportStr.print(appReport.getDiagnostics()); } else { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java index b8be88d..907deb7 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java @@ -104,6 +104,7 @@ public void testGetApplicationReport() throws Exception { YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, FinalApplicationStatus.SUCCEEDED, usageReport, "N/A", 0.53789f, "YARN", null); + newApplicationReport.setLogAggregationStatus("FINISHED"); when(client.getApplicationReport(any(ApplicationId.class))).thenReturn( newApplicationReport); int result = cli.run(new String[] { "application", "-status", applicationId.toString() }); @@ -127,6 +128,7 @@ public void testGetApplicationReport() throws Exception { pw.println("\tAM Host : host"); pw.println("\tAggregate Resource Allocation : " + (i == 0 ? "N/A" : "123456 MB-seconds, 4567 vcore-seconds")); + pw.println("\tLog Aggregation Status : FINISHED"); pw.println("\tDiagnostics : diagnostics"); pw.close(); String appReportStr = baos.toString("UTF-8"); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java index dd3e2bc..6de5942 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java @@ -548,4 +548,23 @@ private TokenPBImpl convertFromProtoFormat(TokenProto p) { private TokenProto convertToProtoFormat(Token t) { return ((TokenPBImpl)t).getProto(); } + + @Override + public String getLogAggregationStatus() { + ApplicationReportProtoOrBuilder p = viaProto ? proto : builder; + if (!p.hasLogAggregationStatus()) { + return null; + } + return p.getLogAggregationStatus(); + } + + @Override + public void setLogAggregationStatus(String logAggregationStatus) { + maybeInitBuilder(); + if (logAggregationStatus == null) { + builder.clearLogAggregationStatus(); + return; + } + builder.setLogAggregationStatus(logAggregationStatus); + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/proto/yarn_server_common_protos.proto hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/proto/yarn_server_common_protos.proto index 6e9f4cb..b5d6afe 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/proto/yarn_server_common_protos.proto +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/proto/yarn_server_common_protos.proto @@ -59,6 +59,7 @@ enum LogAggregationStatusProto { LOG_NOT_START = 2; LOG_RUNNING = 3; LOG_FINISHED = 4; - LOG_TIME_OUT = 5; + LOG_FAILED = 5; + LOG_TIME_OUT = 6; } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java index 33eedbf..95722fd 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java @@ -245,4 +245,6 @@ ApplicationReport createAndGetApplicationReport(String clientUserName, ResourceRequest getAMResourceRequest(); Map getLogAggregationReportsForApp(); + + String getLogAggregationStatusForAppReport(); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java index 47c4807..ad398d8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java @@ -578,6 +578,7 @@ public ApplicationReport createAndGetApplicationReport(String clientUserName, String trackingUrl = UNAVAILABLE; String host = UNAVAILABLE; String origTrackingUrl = UNAVAILABLE; + String logAggregationStatus = UNAVAILABLE; int rpcPort = -1; ApplicationResourceUsageReport appUsageReport = RMServerUtils.DUMMY_APPLICATION_RESOURCE_USAGE_REPORT; @@ -608,6 +609,7 @@ public ApplicationReport createAndGetApplicationReport(String clientUserName, rpcPort = this.currentAttempt.getRpcPort(); appUsageReport = currentAttempt.getApplicationResourceUsageReport(); progress = currentAttempt.getProgress(); + logAggregationStatus = this.getLogAggregationStatusForAppReport(); } diags = this.diagnostics.toString(); @@ -635,13 +637,15 @@ public ApplicationReport createAndGetApplicationReport(String clientUserName, DUMMY_APPLICATION_ATTEMPT_NUMBER); } - return BuilderUtils.newApplicationReport(this.applicationId, - currentApplicationAttemptId, this.user, this.queue, - this.name, host, rpcPort, clientToAMToken, + ApplicationReport report = BuilderUtils.newApplicationReport( + 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); + report.setLogAggregationStatus(logAggregationStatus); + return report; } finally { this.readLock.unlock(); } @@ -827,11 +831,13 @@ public void transition(RMAppImpl app, RMAppEvent event) { // otherwise, add it to ranNodes for further process app.ranNodes.add(nodeAddedEvent.getNodeId()); - app.logAggregationStatus.put(nodeAddedEvent.getNodeId(), - LogAggregationReport.newInstance(app.applicationId, nodeAddedEvent - .getNodeId(), app.logAggregationEnabled - ? LogAggregationStatus.NOT_START : LogAggregationStatus.DISABLED, - "")); + if (!app.logAggregationStatus.containsKey(nodeAddedEvent.getNodeId())) { + app.logAggregationStatus.put(nodeAddedEvent.getNodeId(), + LogAggregationReport.newInstance(app.applicationId, nodeAddedEvent + .getNodeId(), app.logAggregationEnabled + ? LogAggregationStatus.NOT_START : LogAggregationStatus.DISABLED, + "")); + } }; } @@ -1399,6 +1405,8 @@ protected Credentials parseCredentials() throws IOException { .equals(LogAggregationStatus.TIME_OUT) && !output.getValue().getLogAggregationStatus() .equals(LogAggregationStatus.FINISHED) + && !output.getValue().getLogAggregationStatus() + .equals(LogAggregationStatus.FAILED) && isAppInFinalState(this) && System.currentTimeMillis() > this.logAggregationStartTime + this.logAggregationStatusTimeout) { @@ -1423,7 +1431,9 @@ public void aggregateLogReport(NodeId nodeId, LogAggregationReport report) { if (curReport.getLogAggregationStatus().equals( LogAggregationStatus.TIME_OUT)) { if (report.getLogAggregationStatus().equals( - LogAggregationStatus.FINISHED)) { + LogAggregationStatus.FINISHED) + || report.getLogAggregationStatus().equals( + LogAggregationStatus.FAILED)) { curReport.setLogAggregationStatus(report .getLogAggregationStatus()); } @@ -1444,4 +1454,57 @@ public void aggregateLogReport(NodeId nodeId, LogAggregationReport report) { this.writeLock.unlock(); } } + + @Override + public String getLogAggregationStatusForAppReport() { + if (!logAggregationEnabled) { + return LogAggregationStatus.DISABLED.toString(); + } + try { + this.readLock.lock(); + Map reports = + getLogAggregationReportsForApp(); + if (reports.size() == 0) { + return UNAVAILABLE; + } + int logNotStartCount = 0; + int logCompletedCount = 0; + int logTimeOutCount = 0; + int logFailedCount = 0; + for (Entry report : reports.entrySet()) { + switch (report.getValue().getLogAggregationStatus()) { + case NOT_START: + logNotStartCount ++; + break; + case FINISHED: + logCompletedCount ++; + break; + case FAILED: + logFailedCount ++; + logCompletedCount ++; + break; + case TIME_OUT: + logTimeOutCount ++; + logCompletedCount ++; + break; + default: + break; + } + } + if (logNotStartCount == reports.size()) { + return LogAggregationStatus.NOT_START.toString(); + } else if (logCompletedCount == reports.size()) { + if (logFailedCount > 0) { + return LogAggregationStatus.FAILED.toString(); + } else if (logTimeOutCount > 0) { + return LogAggregationStatus.TIME_OUT.toString(); + } + return LogAggregationStatus.FINISHED.toString(); + } else { + return LogAggregationStatus.RUNNING.toString(); + } + } finally { + this.readLock.unlock(); + } + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java index 79b2248..13032e0 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java @@ -94,6 +94,8 @@ protected List resourceRequests; + protected String logAggregationStatus; + public AppInfo() { } // JAXB needs this @@ -141,7 +143,7 @@ public AppInfo(ResourceManager rm, RMApp app, Boolean hasAccess, this.finishedTime = app.getFinishTime(); this.elapsedTime = Times.elapsed(app.getStartTime(), app.getFinishTime()); - + this.logAggregationStatus = app.getLogAggregationStatusForAppReport(); RMAppAttempt attempt = app.getCurrentAppAttempt(); if (attempt != null) { Container masterContainer = attempt.getMasterContainer(); @@ -314,4 +316,8 @@ public long getVcoreSeconds() { public List getResourceRequests() { return this.resourceRequests; } + + public String getLogAggregationStatus() { + return this.logAggregationStatus; + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java index a6e469e..07f976a 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java @@ -196,6 +196,11 @@ public ResourceRequest getAMResourceRequest() { public Map getLogAggregationReportsForApp() { throw new UnsupportedOperationException("Not supported yet."); } + + @Override + public String getLogAggregationStatusForAppReport() { + throw new UnsupportedOperationException("Not supported yet."); + } } public static RMApp newApplication(int i) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/logaggregationstatus/TestRMAppLogAggregationStatus.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/logaggregationstatus/TestRMAppLogAggregationStatus.java index 7397d38..f9b58a1 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/logaggregationstatus/TestRMAppLogAggregationStatus.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/logaggregationstatus/TestRMAppLogAggregationStatus.java @@ -303,6 +303,95 @@ public void testLogAggregationStatus() throws Exception { } } + @Test (timeout = 10000) + public void testGetLogAggregationStatusForAppReport() { + YarnConfiguration conf = new YarnConfiguration(); + + // Disable the log aggregation + conf.setBoolean(YarnConfiguration.LOG_AGGREGATION_ENABLED, false); + RMAppImpl rmApp = (RMAppImpl)createRMApp(conf); + // The log aggregation status should be DISABLED. + Assert.assertEquals(LogAggregationStatus.DISABLED.toString(), + rmApp.getLogAggregationStatusForAppReport()); + + // Enable the log aggregation + conf.setBoolean(YarnConfiguration.LOG_AGGREGATION_ENABLED, true); + rmApp = (RMAppImpl)createRMApp(conf); + // If we do not know any NodeManagers for this application , + // the log aggregation status will return "N/A" + Assert.assertEquals("N/A", rmApp.getLogAggregationStatusForAppReport()); + + NodeId nodeId1 = NodeId.newInstance("localhost", 1111); + NodeId nodeId2 = NodeId.newInstance("localhost", 2222); + NodeId nodeId3 = NodeId.newInstance("localhost", 3333); + NodeId nodeId4 = NodeId.newInstance("localhost", 4444); + + // If the log aggregation status for all NMs are NOT_START, + // the log aggregation status for this app will return NOT_START + rmApp.aggregateLogReport(nodeId1, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.NOT_START, "")); + rmApp.aggregateLogReport(nodeId2, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.NOT_START, "")); + rmApp.aggregateLogReport(nodeId3, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.NOT_START, "")); + rmApp.aggregateLogReport(nodeId4, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.NOT_START, "")); + Assert.assertEquals(LogAggregationStatus.NOT_START.toString(), + rmApp.getLogAggregationStatusForAppReport()); + + rmApp.aggregateLogReport(nodeId1, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.NOT_START, "")); + rmApp.aggregateLogReport(nodeId2, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.RUNNING, "")); + rmApp.aggregateLogReport(nodeId3, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + rmApp.aggregateLogReport(nodeId4, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FAILED, "")); + Assert.assertEquals(LogAggregationStatus.RUNNING.toString(), + rmApp.getLogAggregationStatusForAppReport()); + + // If the log aggregation status for all NMs are FINISHED, + // the log aggregation status for this app will return FINISHED + rmApp.aggregateLogReport(nodeId1, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + rmApp.aggregateLogReport(nodeId2, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + rmApp.aggregateLogReport(nodeId3, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + rmApp.aggregateLogReport(nodeId4, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + Assert.assertEquals(LogAggregationStatus.FINISHED.toString(), + rmApp.getLogAggregationStatusForAppReport()); + + // If at least of one log aggregation status for one NM is TIME_OUT, + // others are FINISHED, the log aggregation status for this app will + // return TIME_OUT + rmApp.aggregateLogReport(nodeId1, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + rmApp.aggregateLogReport(nodeId2, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.TIME_OUT, "")); + rmApp.aggregateLogReport(nodeId3, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + rmApp.aggregateLogReport(nodeId4, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + Assert.assertEquals(LogAggregationStatus.TIME_OUT.toString(), + rmApp.getLogAggregationStatusForAppReport()); + + // If at least of one log aggregation status for one NM is FAILED, + // others are either FINISHED or TIME_OUT, the log aggregation status + // for this app will return FAILED + rmApp.aggregateLogReport(nodeId1, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + rmApp.aggregateLogReport(nodeId2, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.TIME_OUT, "")); + rmApp.aggregateLogReport(nodeId3, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FAILED, "")); + rmApp.aggregateLogReport(nodeId4, LogAggregationReport.newInstance( + rmApp.getApplicationId(), nodeId1, LogAggregationStatus.FINISHED, "")); + Assert.assertEquals(LogAggregationStatus.FAILED.toString(), + rmApp.getLogAggregationStatusForAppReport()); + } + private RMApp createRMApp(Configuration conf) { ApplicationSubmissionContext submissionContext = ApplicationSubmissionContext.newInstance(appId, "test", "default", diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java index 81de286..12f20ac 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java @@ -277,4 +277,9 @@ public ResourceRequest getAMResourceRequest() { public Map getLogAggregationReportsForApp() { throw new UnsupportedOperationException("Not supported yet."); } + + @Override + public String getLogAggregationStatusForAppReport() { + throw new UnsupportedOperationException("Not supported yet."); + } }