diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContext.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContext.java index 60f88f6..f9fc566 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContext.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContext.java @@ -55,7 +55,7 @@ ConcurrentMap getRMApps(); - ConcurrentMap getInactiveRMNodes(); + ConcurrentMap getInactiveRMNodes(); ConcurrentMap getRMNodes(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java index 36eec04..8e5d8fb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java @@ -62,8 +62,8 @@ private final ConcurrentMap nodes = new ConcurrentHashMap(); - private final ConcurrentMap inactiveNodes - = new ConcurrentHashMap(); + private final ConcurrentMap inactiveNodes + = new ConcurrentHashMap(); private boolean isHAEnabled; private boolean isWorkPreservingRecoveryEnabled; @@ -164,7 +164,7 @@ public RMStateStore getStateStore() { } @Override - public ConcurrentMap getInactiveRMNodes() { + public ConcurrentMap getInactiveRMNodes() { return this.inactiveNodes; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java b/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 c960b50..bb0bba8 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java @@ -513,11 +513,10 @@ public void transition(RMNodeImpl rmNode, RMNodeEvent event) { RMNodeStartedEvent startEvent = (RMNodeStartedEvent) event; List containers = null; - String host = rmNode.nodeId.getHost(); - if (rmNode.context.getInactiveRMNodes().containsKey(host)) { + RMNode previouRMNode = rmNode.context.getInactiveRMNodes().get(rmNode.nodeId); + if (previouRMNode != null) { // Old node rejoining - RMNode previouRMNode = rmNode.context.getInactiveRMNodes().get(host); - rmNode.context.getInactiveRMNodes().remove(host); + rmNode.context.getInactiveRMNodes().remove(rmNode.nodeId); rmNode.updateMetricsForRejoinedNode(previouRMNode.getState()); } else { // Increment activeNodes explicitly because this is a new node. @@ -700,8 +699,8 @@ public void transition(RMNodeImpl rmNode, RMNodeEvent event) { rmNode.context.getRMNodes().remove(rmNode.nodeId); LOG.info("Deactivating Node " + rmNode.nodeId + " as it is now " + finalState); - rmNode.context.getInactiveRMNodes().put(rmNode.nodeId.getHost(), rmNode); - + rmNode.context.getInactiveRMNodes().put(rmNode.nodeId, rmNode); + //Update the metrics rmNode.updateMetricsForDeactivatedNode(initialState, finalState); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java index 24a90bd..a1b968f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java @@ -281,7 +281,7 @@ public NodeInfo getNode(@PathParam("nodeId") String nodeId) { RMNode ni = this.rm.getRMContext().getRMNodes().get(nid); boolean isInactive = false; if (ni == null) { - ni = this.rm.getRMContext().getInactiveRMNodes().get(nid.getHost()); + ni = this.rm.getRMContext().getInactiveRMNodes().get(nid); if (ni == null) { throw new NotFoundException("nodeId, " + nodeId + ", is not found"); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java index 0df7c0d..fe4732b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java @@ -157,10 +157,10 @@ public static RMContext mockRMContext(int numApps, int racks, int numNodes, final List deactivatedNodes = MockNodes.deactivatedNodes(racks, numNodes, newResource(mbsPerNode)); - final ConcurrentMap deactivatedNodesMap = + final ConcurrentMap deactivatedNodesMap = Maps.newConcurrentMap(); for (RMNode node : deactivatedNodes) { - deactivatedNodesMap.put(node.getHostName(), node); + deactivatedNodesMap.put(node.getNodeID(), node); } return new RMContextImpl(null, null, null, null, null, null, null, null, null, null) { @@ -169,7 +169,7 @@ public static RMContext mockRMContext(int numApps, int racks, int numNodes, return applicationsMaps; } @Override - public ConcurrentMap getInactiveRMNodes() { + public ConcurrentMap getInactiveRMNodes() { return deactivatedNodesMap; } @Override diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java index e260503..1e09b47 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java @@ -268,15 +268,20 @@ public void testNodesQueryStateLost() throws JSONException, Exception { assertEquals("incorrect number of elements", 1, nodes.length()); JSONArray nodeArray = nodes.getJSONArray("node"); assertEquals("incorrect number of elements", 2, nodeArray.length()); - for (int i = 0; i < nodeArray.length(); ++i) { - JSONObject info = nodeArray.getJSONObject(i); - String host = info.get("id").toString().split(":")[0]; - RMNode rmNode = rm.getRMContext().getInactiveRMNodes().get(host); - WebServicesTestUtils.checkStringMatch("nodeHTTPAddress", "", - info.getString("nodeHTTPAddress")); - WebServicesTestUtils.checkStringMatch("state", rmNode.getState() - .toString(), info.getString("state")); - } + + JSONObject info = nodeArray.getJSONObject(0); + RMNode rmNode = rm.getRMContext().getInactiveRMNodes().get(nm1.getNodeId()); + WebServicesTestUtils.checkStringMatch("nodeHTTPAddress", "", + info.getString("nodeHTTPAddress")); + WebServicesTestUtils.checkStringMatch("state", rmNode.getState() + .toString(), info.getString("state")); + + info = nodeArray.getJSONObject(1); + rmNode = rm.getRMContext().getInactiveRMNodes().get(nm2.getNodeId()); + WebServicesTestUtils.checkStringMatch("nodeHTTPAddress", "", + info.getString("nodeHTTPAddress")); + WebServicesTestUtils.checkStringMatch("state", rmNode.getState() + .toString(), info.getString("state")); } @Test