diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/NodeState.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/NodeState.java
index d0344fb2699..e0802806298 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/NodeState.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/NodeState.java
@@ -21,6 +21,8 @@
import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
+import java.util.EnumSet;
+
/**
*
State of a Node.
*/
@@ -55,4 +57,11 @@ public boolean isUnusable() {
return (this == UNHEALTHY || this == DECOMMISSIONED
|| this == LOST || this == SHUTDOWN);
}
+
+ public static boolean isInactiveState(EnumSet nodeStates) {
+ return nodeStates.contains(NodeState.DECOMMISSIONED) ||
+ nodeStates.contains(NodeState.LOST) ||
+ nodeStates.contains(NodeState.REBOOTED) ||
+ nodeStates.contains(NodeState.SHUTDOWN);
+ }
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java
index b18b12e8457..cdc1b02c01e 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java
@@ -121,9 +121,7 @@
}
// inactiveNodes contains nodes that are DECOMMISSIONED, LOST, OR REBOOTED
- if (acceptedStates.contains(NodeState.DECOMMISSIONED) ||
- acceptedStates.contains(NodeState.LOST) ||
- acceptedStates.contains(NodeState.REBOOTED)) {
+ if (NodeState.isInactiveState(acceptedStates)) {
for (RMNode rmNode : context.getInactiveRMNodes().values()) {
if ((rmNode != null) && acceptedStates.contains(rmNode.getState())) {
results.add(rmNode);
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java 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 01173768c14..a838ca4e63a 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java
@@ -441,9 +441,7 @@ public NodesInfo getNodes(@QueryParam(RMWSConsts.STATES) String states) {
NodesInfo nodesInfo = new NodesInfo();
for (RMNode rmNode : rmNodes) {
NodeInfo nodeInfo = new NodeInfo(rmNode, sched);
- if (EnumSet
- .of(NodeState.LOST, NodeState.DECOMMISSIONED, NodeState.REBOOTED)
- .contains(rmNode.getState())) {
+ if (NodeState.isInactiveState(EnumSet.of(rmNode.getState()))) {
nodeInfo.setNodeHTTPAddress(RMWSConsts.EMPTY);
}
nodesInfo.add(nodeInfo);
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMServerUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMServerUtils.java
index c80469bfe90..9c233b9cf9e 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMServerUtils.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMServerUtils.java
@@ -23,16 +23,20 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest;
import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.api.records.NodeId;
+import org.apache.hadoop.yarn.api.records.NodeState;
import org.apache.hadoop.yarn.api.records.Priority;
import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.api.records.ResourceRequest;
@@ -43,11 +47,14 @@
import org.apache.hadoop.yarn.event.Dispatcher;
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager;
import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer;
+import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ContainerUpdates;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class TestRMServerUtils {
@@ -120,6 +127,37 @@ public void testValidateAndSplitUpdateResourceRequests() {
Assert.assertEquals(containerIdOk, increaseRequest.getContainerId());
}
+ @Test
+ public void testQueryRMNodes() throws Exception {
+ RMContext rmContext = mock(RMContext.class);
+ NodeId node1 = NodeId.newInstance("node1", 1234);
+ RMNode rmNode1 = mock(RMNode.class);
+ ConcurrentMap inactiveList =
+ new ConcurrentHashMap();
+ when(rmNode1.getState()).thenReturn(NodeState.SHUTDOWN);
+ inactiveList.put(node1, rmNode1);
+ when(rmContext.getInactiveRMNodes()).thenReturn(inactiveList);
+ List result = RMServerUtils.queryRMNodes(rmContext,
+ EnumSet.of(NodeState.SHUTDOWN));
+ Assert.assertTrue(result.size() != 0);
+ Assert.assertEquals(result.get(0), rmNode1);
+ when(rmNode1.getState()).thenReturn(NodeState.DECOMMISSIONED);
+ result = RMServerUtils.queryRMNodes(rmContext,
+ EnumSet.of(NodeState.DECOMMISSIONED));
+ Assert.assertTrue(result.size() != 0);
+ Assert.assertEquals(result.get(0), rmNode1);
+ when(rmNode1.getState()).thenReturn(NodeState.LOST);
+ result = RMServerUtils.queryRMNodes(rmContext,
+ EnumSet.of(NodeState.LOST));
+ Assert.assertTrue(result.size() != 0);
+ Assert.assertEquals(result.get(0), rmNode1);
+ when(rmNode1.getState()).thenReturn(NodeState.REBOOTED);
+ result = RMServerUtils.queryRMNodes(rmContext,
+ EnumSet.of(NodeState.REBOOTED));
+ Assert.assertTrue(result.size() != 0);
+ Assert.assertEquals(result.get(0), rmNode1);
+ }
+
@Test
public void testGetApplicableNodeCountForAMLocality() throws Exception {
List rack1Nodes = new ArrayList<>();