This is an automated email from the ASF dual-hosted git repository. epayne pushed a commit to branch branch-2.10 in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-2.10 by this push: new 5f2047d YARN-8222. Fix potential NPE when gets RMApp from RM context. Contributed by Tao Yang. 5f2047d is described below commit 5f2047d491f3e168326257cc63e2cb5b0ddbcd6a Author: Weiwei Yang <w...@apache.org> AuthorDate: Wed May 2 17:54:46 2018 +0800 YARN-8222. Fix potential NPE when gets RMApp from RM context. Contributed by Tao Yang. (cherry picked from commit 251f528814c4a4647cac0af6effb9a73135db180) --- .../rmcontainer/RMContainerImpl.java | 30 ++++++++++++---------- .../scheduler/SchedulerApplicationAttempt.java | 13 +++++----- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmcontainer/RMContainerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmcontainer/RMContainerImpl.java index 76933f1..3c85df9 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmcontainer/RMContainerImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmcontainer/RMContainerImpl.java @@ -45,6 +45,7 @@ import org.apache.hadoop.yarn.event.EventHandler; import org.apache.hadoop.yarn.server.api.protocolrecords.NMContainerStatus; import org.apache.hadoop.yarn.server.resourcemanager.RMContext; import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager; +import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppRunningOnNodeEvent; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptEvent; @@ -709,21 +710,22 @@ public class RMContainerImpl implements RMContainer { private static void updateAttemptMetrics(RMContainerImpl container) { // If this is a preempted container, update preemption metrics Resource resource = container.getContainer().getResource(); - RMAppAttempt rmAttempt = container.rmContext.getRMApps() - .get(container.getApplicationAttemptId().getApplicationId()) - .getCurrentAppAttempt(); - - if (rmAttempt != null) { - long usedMillis = container.finishTime - container.creationTime; - rmAttempt.getRMAppAttemptMetrics() - .updateAggregateAppResourceUsage(resource, usedMillis); - // If this is a preempted container, update preemption metrics - if (ContainerExitStatus.PREEMPTED == container.finishedStatus - .getExitStatus()) { + RMApp app = container.rmContext.getRMApps() + .get(container.getApplicationAttemptId().getApplicationId()); + if (app != null) { + RMAppAttempt rmAttempt = app.getCurrentAppAttempt(); + if (rmAttempt != null) { + long usedMillis = container.finishTime - container.creationTime; rmAttempt.getRMAppAttemptMetrics() - .updatePreemptionInfo(resource, container); - rmAttempt.getRMAppAttemptMetrics() - .updateAggregatePreemptedAppResourceUsage(resource, usedMillis); + .updateAggregateAppResourceUsage(resource, usedMillis); + // If this is a preempted container, update preemption metrics + if (ContainerExitStatus.PREEMPTED == container.finishedStatus + .getExitStatus()) { + rmAttempt.getRMAppAttemptMetrics() + .updatePreemptionInfo(resource, container); + rmAttempt.getRMAppAttemptMetrics() + .updateAggregatePreemptedAppResourceUsage(resource, usedMillis); + } } } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java index 5e85047..0b01024 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java @@ -1166,12 +1166,13 @@ public class SchedulerApplicationAttempt implements SchedulableEntity { return; } - RMAppAttempt attempt = - rmContext.getRMApps().get(attemptId.getApplicationId()) - .getCurrentAppAttempt(); - if (attempt != null) { - attempt.getRMAppAttemptMetrics().incNumAllocatedContainers(containerType, - requestType); + RMApp app = rmContext.getRMApps().get(attemptId.getApplicationId()); + if (app != null) { + RMAppAttempt attempt = app.getCurrentAppAttempt(); + if (attempt != null) { + attempt.getRMAppAttemptMetrics() + .incNumAllocatedContainers(containerType, requestType); + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org