You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-commits@hadoop.apache.org by bo...@apache.org on 2012/08/31 18:33:21 UTC
svn commit: r1379498 - in /hadoop/common/trunk/hadoop-yarn-project: ./
hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/
hadoop-yarn/hadoop-yarn-server/hadoop-yarn-serv...
Author: bobby
Date: Fri Aug 31 16:33:21 2012
New Revision: 1379498
URL: http://svn.apache.org/viewvc?rev=1379498&view=rev
Log:
YARN-63. RMNodeImpl is missing valid transitions from the UNHEALTHY state (Jason Lowe via bobby)
Modified:
hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
hadoop/common/trunk/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/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java
Modified: hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt?rev=1379498&r1=1379497&r2=1379498&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt Fri Aug 31 16:33:21 2012
@@ -70,3 +70,7 @@ Release 0.23.3 - Unreleased
YARN-31. Fix TestDelegationTokenRenewer to not depend on test order so as to
pass tests on jdk7. (Thomas Graves via vinodkv)
+
+ YARN-63. RMNodeImpl is missing valid transitions from the UNHEALTHY state
+ (Jason Lowe via bobby)
+
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java?rev=1379498&r1=1379497&r2=1379498&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java Fri Aug 31 16:33:21 2012
@@ -144,6 +144,15 @@ public class RMNodeImpl implements RMNod
.addTransition(NodeState.UNHEALTHY,
EnumSet.of(NodeState.UNHEALTHY, NodeState.RUNNING),
RMNodeEventType.STATUS_UPDATE, new StatusUpdateWhenUnHealthyTransition())
+ .addTransition(NodeState.UNHEALTHY, NodeState.DECOMMISSIONED,
+ RMNodeEventType.DECOMMISSION,
+ new DeactivateNodeTransition(NodeState.DECOMMISSIONED))
+ .addTransition(NodeState.UNHEALTHY, NodeState.LOST,
+ RMNodeEventType.EXPIRE,
+ new DeactivateNodeTransition(NodeState.LOST))
+ .addTransition(NodeState.UNHEALTHY, NodeState.REBOOTED,
+ RMNodeEventType.REBOOTING,
+ new DeactivateNodeTransition(NodeState.REBOOTED))
.addTransition(NodeState.UNHEALTHY, NodeState.UNHEALTHY,
RMNodeEventType.RECONNECTED, new ReconnectNodeTransition())
.addTransition(NodeState.UNHEALTHY, NodeState.UNHEALTHY,
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java?rev=1379498&r1=1379497&r2=1379498&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMNodeTransitions.java Fri Aug 31 16:33:21 2012
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.doRetu
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -32,10 +33,12 @@ import org.apache.hadoop.yarn.api.record
import org.apache.hadoop.yarn.api.records.ContainerStatus;
import org.apache.hadoop.yarn.api.records.NodeHealthStatus;
import org.apache.hadoop.yarn.api.records.NodeId;
+import org.apache.hadoop.yarn.api.records.NodeState;
import org.apache.hadoop.yarn.event.EventHandler;
import org.apache.hadoop.yarn.server.api.records.HeartbeatResponse;
import org.apache.hadoop.yarn.server.resourcemanager.recovery.MemStore;
import org.apache.hadoop.yarn.server.resourcemanager.resourcetracker.InlineDispatcher;
+import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeCleanContainerEvent;
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEvent;
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEventType;
@@ -148,4 +151,69 @@ public class TestRMNodeTransitions {
Assert.assertEquals(0, completedContainers.size());
}
+ @Test
+ public void testRunningExpire() {
+ RMNodeImpl node = getRunningNode();
+ node.handle(new RMNodeEvent(node.getNodeID(), RMNodeEventType.EXPIRE));
+ Assert.assertEquals(NodeState.LOST, node.getState());
+ }
+
+ @Test
+ public void testUnhealthyExpire() {
+ RMNodeImpl node = getUnhealthyNode();
+ node.handle(new RMNodeEvent(node.getNodeID(), RMNodeEventType.EXPIRE));
+ Assert.assertEquals(NodeState.LOST, node.getState());
+ }
+
+ @Test
+ public void testRunningDecommission() {
+ RMNodeImpl node = getRunningNode();
+ node.handle(new RMNodeEvent(node.getNodeID(),
+ RMNodeEventType.DECOMMISSION));
+ Assert.assertEquals(NodeState.DECOMMISSIONED, node.getState());
+ }
+
+ @Test
+ public void testUnhealthyDecommission() {
+ RMNodeImpl node = getUnhealthyNode();
+ node.handle(new RMNodeEvent(node.getNodeID(),
+ RMNodeEventType.DECOMMISSION));
+ Assert.assertEquals(NodeState.DECOMMISSIONED, node.getState());
+ }
+
+ @Test
+ public void testRunningRebooting() {
+ RMNodeImpl node = getRunningNode();
+ node.handle(new RMNodeEvent(node.getNodeID(),
+ RMNodeEventType.REBOOTING));
+ Assert.assertEquals(NodeState.REBOOTED, node.getState());
+ }
+
+ @Test
+ public void testUnhealthyRebooting() {
+ RMNodeImpl node = getUnhealthyNode();
+ node.handle(new RMNodeEvent(node.getNodeID(),
+ RMNodeEventType.REBOOTING));
+ Assert.assertEquals(NodeState.REBOOTED, node.getState());
+ }
+
+ private RMNodeImpl getRunningNode() {
+ NodeId nodeId = BuilderUtils.newNodeId("localhost", 0);
+ RMNodeImpl node = new RMNodeImpl(nodeId, rmContext,null, 0, 0,
+ null, null, null);
+ node.handle(new RMNodeEvent(node.getNodeID(), RMNodeEventType.STARTED));
+ Assert.assertEquals(NodeState.RUNNING, node.getState());
+ return node;
+ }
+
+ private RMNodeImpl getUnhealthyNode() {
+ RMNodeImpl node = getRunningNode();
+ NodeHealthStatus status = node.getNodeHealthStatus();
+ status.setHealthReport("sick");
+ status.setIsNodeHealthy(false);
+ node.handle(new RMNodeStatusEvent(node.getNodeID(), status,
+ new ArrayList<ContainerStatus>(), null, null, null));
+ Assert.assertEquals(NodeState.UNHEALTHY, node.getState());
+ return node;
+ }
}