From 9a60341094575bf3b8cfd5c678ba63674a51be52 Mon Sep 17 00:00:00 2001 From: Akira Ajisaka Date: Mon, 7 Jan 2019 21:03:07 +0900 Subject: [PATCH] YARN-9179. Fix NPE in AbstractYarnScheduler#updateNewContainerInfo --- .../scheduler/AbstractYarnScheduler.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 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/scheduler/AbstractYarnScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java index 0ad47bb8f90..3fb9664e327 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java @@ -1040,20 +1040,27 @@ public SchedulerNode getNode(NodeId nodeId) { for (Map.Entry c : updateExistContainers) { SchedulerApplication app = applications.get(c.getKey()); ContainerId containerId = c.getValue().getContainerId(); + if (app == null || app.getCurrentAppAttempt() == null) { + continue; + } + RMContainer rmContainer + = app.getCurrentAppAttempt().getRMContainer(containerId); + if (rmContainer == null) { + continue; + } + // exposed ports are already set for the container, skip + if (rmContainer.getExposedPorts() != null && + rmContainer.getExposedPorts().size() > 0) { + continue; + } + String strExposedPorts = c.getValue().getExposedPorts(); - Map>> exposedPorts = null; if (null != strExposedPorts && !strExposedPorts.isEmpty()) { Gson gson = new Gson(); - exposedPorts = gson.fromJson(strExposedPorts, + Map>> exposedPorts = + gson.fromJson(strExposedPorts, new TypeToken>>>() {}.getType()); - } - - RMContainer rmContainer - = app.getCurrentAppAttempt().getRMContainer(containerId); - if (null != rmContainer && - (null == rmContainer.getExposedPorts() - || rmContainer.getExposedPorts().size() == 0)) { LOG.info("update exist container " + containerId.getContainerId() + ", strExposedPorts = " + strExposedPorts); rmContainer.setExposedPorts(exposedPorts); -- 2.18.0