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..2700cf296b9 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 @@ -55,4 +55,16 @@ public boolean isUnusable() { return (this == UNHEALTHY || this == DECOMMISSIONED || this == LOST || this == SHUTDOWN); } + + public boolean isInactiveState() { + return this == NodeState.DECOMMISSIONED || + this == NodeState.LOST || this == NodeState.REBOOTED || + this == NodeState.SHUTDOWN; + } + + public boolean isActiveState() { + return this == NodeState.NEW || + this == NodeState.RUNNING || this == NodeState.UNHEALTHY || + this == NodeState.DECOMMISSIONING; + } } 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 14416c7e00c..d3558374076 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 @@ -91,10 +91,20 @@ EnumSet acceptedStates) { // nodes contains nodes that are NEW, RUNNING OR UNHEALTHY ArrayList results = new ArrayList(); - if (acceptedStates.contains(NodeState.NEW) || - acceptedStates.contains(NodeState.RUNNING) || - acceptedStates.contains(NodeState.DECOMMISSIONING) || - acceptedStates.contains(NodeState.UNHEALTHY)) { + boolean hasActive = false; + boolean hasInactive = false; + for (NodeState nodeState : acceptedStates) { + if (!hasInactive && nodeState.isInactiveState()) { + hasInactive = true; + } + if (!hasActive && nodeState.isActiveState()) { + hasActive = true; + } + if (hasActive && hasInactive) { + break; + } + } + if (hasActive) { for (RMNode rmNode : context.getRMNodes().values()) { if (acceptedStates.contains(rmNode.getState())) { results.add(rmNode); @@ -103,9 +113,7 @@ } // inactiveNodes contains nodes that are DECOMMISSIONED, LOST, OR REBOOTED - if (acceptedStates.contains(NodeState.DECOMMISSIONED) || - acceptedStates.contains(NodeState.LOST) || - acceptedStates.contains(NodeState.REBOOTED)) { + if (hasInactive) { for (RMNode rmNode : context.getInactiveRMNodes().values()) { if ((rmNode != null) && acceptedStates.contains(rmNode.getState())) { results.add(rmNode);