YARN-63. RMNodeImpl is missing valid transitions from the UNHEALTHY state (Jason Lowe via bobby)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1379498 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4cdc854452
commit
d8ce3bee58
|
@ -70,3 +70,7 @@ Release 0.23.3 - Unreleased
|
||||||
|
|
||||||
YARN-31. Fix TestDelegationTokenRenewer to not depend on test order so as to
|
YARN-31. Fix TestDelegationTokenRenewer to not depend on test order so as to
|
||||||
pass tests on jdk7. (Thomas Graves via vinodkv)
|
pass tests on jdk7. (Thomas Graves via vinodkv)
|
||||||
|
|
||||||
|
YARN-63. RMNodeImpl is missing valid transitions from the UNHEALTHY state
|
||||||
|
(Jason Lowe via bobby)
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,15 @@ public class RMNodeImpl implements RMNode, EventHandler<RMNodeEvent> {
|
||||||
.addTransition(NodeState.UNHEALTHY,
|
.addTransition(NodeState.UNHEALTHY,
|
||||||
EnumSet.of(NodeState.UNHEALTHY, NodeState.RUNNING),
|
EnumSet.of(NodeState.UNHEALTHY, NodeState.RUNNING),
|
||||||
RMNodeEventType.STATUS_UPDATE, new StatusUpdateWhenUnHealthyTransition())
|
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,
|
.addTransition(NodeState.UNHEALTHY, NodeState.UNHEALTHY,
|
||||||
RMNodeEventType.RECONNECTED, new ReconnectNodeTransition())
|
RMNodeEventType.RECONNECTED, new ReconnectNodeTransition())
|
||||||
.addTransition(NodeState.UNHEALTHY, NodeState.UNHEALTHY,
|
.addTransition(NodeState.UNHEALTHY, NodeState.UNHEALTHY,
|
||||||
|
|
|
@ -23,6 +23,7 @@ import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -32,10 +33,12 @@ import org.apache.hadoop.yarn.api.records.ContainerId;
|
||||||
import org.apache.hadoop.yarn.api.records.ContainerStatus;
|
import org.apache.hadoop.yarn.api.records.ContainerStatus;
|
||||||
import org.apache.hadoop.yarn.api.records.NodeHealthStatus;
|
import org.apache.hadoop.yarn.api.records.NodeHealthStatus;
|
||||||
import org.apache.hadoop.yarn.api.records.NodeId;
|
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.event.EventHandler;
|
||||||
import org.apache.hadoop.yarn.server.api.records.HeartbeatResponse;
|
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.recovery.MemStore;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.resourcetracker.InlineDispatcher;
|
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.RMNodeCleanContainerEvent;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEvent;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEvent;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEventType;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEventType;
|
||||||
|
@ -148,4 +151,69 @@ public class TestRMNodeTransitions {
|
||||||
Assert.assertEquals(0, completedContainers.size());
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue