Repository: hadoop Updated Branches: refs/heads/trunk 06d1c9033 -> 8ed0d4b74
YARN-4152. NodeManager crash with NPE when LogAggregationService#stopContainer called for absent container. (Bibin A Chundatt via rohithsharmaks) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8ed0d4b7 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8ed0d4b7 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8ed0d4b7 Branch: refs/heads/trunk Commit: 8ed0d4b744e5321c9f0f7f19a6c9737bb2da2ef6 Parents: 06d1c90 Author: Rohith Sharma K S <[email protected]> Authored: Thu Sep 24 11:24:14 2015 +0530 Committer: Rohith Sharma K S <[email protected]> Committed: Thu Sep 24 11:24:14 2015 +0530 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 +++ .../logaggregation/LogAggregationService.java | 11 +++++++++-- .../TestLogAggregationService.java | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ed0d4b7/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index d090dd0..0a0a65c 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -896,6 +896,9 @@ Release 2.8.0 - UNRELEASED YARN-4171. Fix findbugs warnings in YARN-1197 branch. (Wangda Tan via jianhe) + YARN-4152. NodeManager crash with NPE when LogAggregationService#stopContainer called for + absent container. (Bibin A Chundatt via rohithsharmaks) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ed0d4b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java index 6a6f101..f64685d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java @@ -56,6 +56,7 @@ import org.apache.hadoop.yarn.server.nodemanager.DeletionService; import org.apache.hadoop.yarn.server.nodemanager.LocalDirsHandlerService; import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationEventType; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container; import org.apache.hadoop.yarn.server.nodemanager.containermanager.loghandler.LogHandler; import org.apache.hadoop.yarn.server.nodemanager.containermanager.loghandler.event.LogHandlerAppFinishedEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.loghandler.event.LogHandlerAppStartedEvent; @@ -423,8 +424,14 @@ public class LogAggregationService extends AbstractService implements + ", did it fail to start?"); return; } - ContainerType containerType = context.getContainers().get( - containerId).getContainerTokenIdentifier().getContainerType(); + Container container = context.getContainers().get(containerId); + if (null == container) { + LOG.warn("Log aggregation cannot be started for " + containerId + + ", as its an absent container"); + return; + } + ContainerType containerType = + container.getContainerTokenIdentifier().getContainerType(); aggregator.startContainerLogAggregation( new ContainerLogContext(containerId, containerType, exitCode)); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ed0d4b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java index 77c6e3c..0b33634 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java @@ -1509,6 +1509,25 @@ public class TestLogAggregationService extends BaseContainerManagerTest { verifyLogAggFinishEvent(appId); } + @Test(timeout = 50000) + public void testLogAggregationAbsentContainer() throws Exception { + ApplicationId appId = createApplication(); + LogAggregationService logAggregationService = + createLogAggregationService(appId, + FailedOrKilledContainerLogAggregationPolicy.class, null); + ApplicationAttemptId appAttemptId1 = + BuilderUtils.newApplicationAttemptId(appId, 1); + ContainerId containerId = BuilderUtils.newContainerId(appAttemptId1, 2l); + try { + logAggregationService.handle(new LogHandlerContainerFinishedEvent( + containerId, 100)); + assertTrue("Should skip when null containerID", true); + } catch (Exception e) { + Assert.assertFalse("Exception not expected should skip null containerid", + true); + } + } + @Test (timeout = 50000) @SuppressWarnings("unchecked") public void testAMOnlyContainerPolicy() throws Exception {
