diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java index 4cdf67a..ec2708e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java @@ -166,17 +166,8 @@ private void setDecomissionedNMs() { UnknownNodeId nodeId = new UnknownNodeId(host); RMNodeImpl rmNode = new RMNodeImpl(nodeId, rmContext, host, -1, -1, new UnknownNode(host), null, null); - - RMNode prevRMNode = - rmContext.getRMNodes().putIfAbsent(nodeId, rmNode); - if (prevRMNode != null) { - this.rmContext.getDispatcher().getEventHandler().handle( - new RMNodeEvent(prevRMNode.getNodeID(), - RMNodeEventType.DECOMMISSION)); - } else { - this.rmContext.getDispatcher().getEventHandler().handle( - new RMNodeEvent(nodeId, RMNodeEventType.DECOMMISSION)); - } + rmContext.getInactiveRMNodes().put(nodeId, rmNode); + rmNode.handle(new RMNodeEvent(nodeId, RMNodeEventType.DECOMMISSION)); } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java index ca9df38..5f8317e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java @@ -1017,6 +1017,10 @@ public void transition(RMNodeImpl rmNode, RMNodeEvent event) { */ public static void deactivateNode(RMNodeImpl rmNode, NodeState finalState) { + if (rmNode.getNodeID().getPort() == -1) { + rmNode.updateMetricsForDeactivatedNode(rmNode.getState(), finalState); + return; + } reportNodeUnusable(rmNode, finalState); // Deactivate the node diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java index 701e512..6ba360b 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java @@ -688,6 +688,20 @@ public void testUpdateHeartbeatResponseForAppLifeCycle() { Assert.assertEquals(0, node.getRunningApps().size()); } + @Test + public void testUnknownNodeId() { + NodesListManager.UnknownNodeId nodeId = + new NodesListManager.UnknownNodeId("host1"); + RMNodeImpl node = + new RMNodeImpl(nodeId, rmContext, null, 0, 0, null, null, null); + rmContext.getInactiveRMNodes().putIfAbsent(nodeId,node); + node.handle( + new RMNodeEvent(node.getNodeID(), RMNodeEventType.DECOMMISSION)); + Assert.assertNull( + "Must be null as there is no NODE_UNUSABLE update", + nodesListManagerEvent); + } + private RMNodeImpl getRunningNode() { return getRunningNode(null, 0); }