This is an automated email from the ASF dual-hosted git repository. rohithsharmaks pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit 573b1587918c4c0efdb7e9fff6f5be12bf31b619 Author: Rohith Sharma K S <[email protected]> AuthorDate: Fri Jan 4 14:01:24 2019 +0530 YARN-8567. Fetching yarn logs fails for long running application if it is not present in timeline store. Contributed by Tarun Parimi. --- .../yarn/client/api/impl/YarnClientImpl.java | 2 +- .../yarn/client/api/impl/TestYarnClient.java | 50 ++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java index 28a7f85..86bda98 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java @@ -879,7 +879,7 @@ public class YarnClientImpl extends YarnClient { try { containersListFromAHS = getContainerReportFromHistory(applicationAttemptId); - } catch (IOException e) { + } catch (IOException | YarnException e) { if (appNotFoundInRM) { throw e; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java index 17e43ca..7ad7e3a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java @@ -531,6 +531,44 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase { } @Test(timeout = 10000) + public void testGetContainersOnAHSFail() throws YarnException, IOException { + Configuration conf = getConf(); + conf.setBoolean(YarnConfiguration.APPLICATION_HISTORY_ENABLED, + true); + + final YarnClient client = new MockYarnClient() { + @Override + public List<ContainerReport> getContainers( + ApplicationAttemptId appAttemptId) throws YarnException, + IOException { + return getContainersOnAHSFail(appAttemptId); + } + }; + + client.init(conf); + client.start(); + + ApplicationId applicationId = ApplicationId.newInstance(1234, 5); + ApplicationAttemptId appAttemptId = ApplicationAttemptId.newInstance( + applicationId, 1); + List<ContainerReport> reports = client.getContainers(appAttemptId); + Assert.assertNotNull(reports); + Assert.assertTrue(reports.size() == 2); + Assert.assertEquals(reports.get(0).getContainerId(), + (ContainerId.newContainerId(appAttemptId, 1))); + Assert.assertEquals(reports.get(1).getContainerId(), + (ContainerId.newContainerId(appAttemptId, 2))); + + //Only 2 running containers from RM are present when AHS throws exception + Assert.assertEquals(ContainerState.RUNNING, + (reports.get(0).getContainerState())); + Assert.assertEquals(ContainerState.RUNNING, + (reports.get(1).getContainerState())); + client.stop(); + } + + + @Test(timeout = 10000) public void testGetContainerReport() throws YarnException, IOException { Configuration conf = getConf(); conf.setBoolean(YarnConfiguration.APPLICATION_HISTORY_ENABLED, @@ -914,6 +952,18 @@ public class TestYarnClient extends ParameterizedSchedulerTestBase { return super.getContainers(appAttemptId); } + protected List<ContainerReport> + getContainersOnAHSFail(ApplicationAttemptId appAttemptId) + throws YarnException, IOException { + when(mockContainersResponse.getContainerList()).thenReturn( + getContainersReport(appAttemptId)); + when(historyClient.getContainers(any(ApplicationAttemptId.class))) + .thenThrow(new ApplicationNotFoundException( + appAttemptId.getApplicationId() + + " does not exist in the timeline store")); + return super.getContainers(appAttemptId); + } + private List<ContainerReport> getContainersFromAHS( ApplicationAttemptId appAttemptId) { return containersFromAHS.get(appAttemptId); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
