Repository: incubator-slider Updated Branches: refs/heads/develop 1e93e91ad -> a66f7db83
SLIDER-962 TestRoleHistoryContainerEvents.testNodeUpdated failing Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/a66f7db8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/a66f7db8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/a66f7db8 Branch: refs/heads/develop Commit: a66f7db839e606a2ae96d51f9f0a5d4d4760bd6e Parents: 1e93e91 Author: Steve Loughran <[email protected]> Authored: Thu Nov 5 12:41:46 2015 +0000 Committer: Steve Loughran <[email protected]> Committed: Thu Nov 5 13:18:29 2015 +0000 ---------------------------------------------------------------------- .../TestRoleHistoryContainerEvents.groovy | 66 +++++++++++--------- .../appmaster/model/mock/MockContainer.groovy | 2 +- .../appmaster/model/mock/MockFactory.groovy | 18 +++++- 3 files changed, 53 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/a66f7db8/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryContainerEvents.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryContainerEvents.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryContainerEvents.groovy index 4fdf39c..fa10145 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryContainerEvents.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryContainerEvents.groovy @@ -122,16 +122,13 @@ class TestRoleHistoryContainerEvents extends BaseMockAppStateTest { AMRMClient.ContainerRequest request = roleHistory.requestNode(roleStatus, resource); - List<String> nodes = request.nodes - assert nodes == null + assert request.nodes == null //pick an idle host String hostname = age3Active0.hostname; //build a container - MockContainer container = factory.newContainer() - container.nodeId = new MockNodeId(hostname, 0) - container.priority = request.priority + MockContainer container = factory.newContainer(new MockNodeId(hostname, 0), request.priority) roleHistory.onContainerAssigned(container); NodeMap nodemap = roleHistory.cloneNodemap(); @@ -189,15 +186,14 @@ class TestRoleHistoryContainerEvents extends BaseMockAppStateTest { //pick an idle host String hostname = age3Active0.hostname; //build a container - MockContainer container = factory.newContainer() - container.nodeId = new MockNodeId(hostname, 0) - container.priority = ContainerPriority.createPriority(0, false) + MockContainer container = factory.newContainer( + new MockNodeId(hostname, 0), + ContainerPriority.createPriority(0, false)) NodeMap nodemap = roleHistory.cloneNodemap(); NodeInstance allocated = nodemap.get(hostname) NodeEntry roleEntry = allocated.get(role) - RoleInstance ri = new RoleInstance(container); //tell RH that it started roleHistory.onContainerStarted(container) assert roleEntry.starting == 0 @@ -219,9 +215,7 @@ class TestRoleHistoryContainerEvents extends BaseMockAppStateTest { assert hostname == age3Active0.hostname //build a container - MockContainer container = factory.newContainer() - container.nodeId = new MockNodeId(hostname, 0) - container.priority = request.getPriority() + MockContainer container = factory.newContainer(new MockNodeId(hostname, 0), request.priority) roleHistory.onContainerAssigned(container); NodeMap nodemap = roleHistory.cloneNodemap(); @@ -378,24 +372,22 @@ class TestRoleHistoryContainerEvents extends BaseMockAppStateTest { @Test public void testNodeUpdated() throws Throwable { describe("fail a node") - + int role = 0 ProviderRole provRole = new ProviderRole(roleName, role) RoleStatus roleStatus = new RoleStatus(provRole) - AMRMClient.ContainerRequest request = - roleHistory.requestNode(roleStatus, resource); + AMRMClient.ContainerRequest request = roleHistory.requestNode(roleStatus, resource); String hostname = request.getNodes()[0] - assert hostname == age3Active0.hostname + assert age3Active0.hostname == hostname // build a container - MockContainer container = factory.newContainer() - container.nodeId = new MockNodeId(hostname, 0) - container.priority = request.getPriority() + MockContainer container = factory.newContainer(new MockNodeId(hostname, 0), request.priority) + roleHistory.onContainerAssigned(container); NodeMap nodemap = roleHistory.cloneNodemap(); - NodeInstance allocated = nodemap.get(hostname) + NodeInstance allocated = nodemap[hostname] NodeEntry roleEntry = allocated.get(role) assert roleEntry.starting == 1 assert !roleEntry.available @@ -408,20 +400,34 @@ class TestRoleHistoryContainerEvents extends BaseMockAppStateTest { // now send a list of updated (failed) nodes event List<NodeReport> nodesUpdated = new ArrayList<NodeReport>(); - NodeId nodeId = NodeId.newInstance(hostname, 0) - NodeReport nodeReport = NodeReport.newInstance(nodeId, NodeState.LOST, null, null, null, null, 1, null, 0) + NodeReport nodeReport = NodeReport.newInstance( + NodeId.newInstance(hostname, 0), + NodeState.LOST, + null, null, null, null, 1, null, 0) nodesUpdated.add(nodeReport) roleHistory.onNodesUpdated(nodesUpdated) nodemap = roleHistory.cloneNodemap() int endSize = nodemap.size() - if (startSize == 0) { - assert endSize == 0 - } else { - assert startSize - endSize == 1 - } - assert nodemap.get(hostname) == null - List<String> failedNodes = roleHistory.cloneFailedNodes() - assert failedNodes.contains(hostname) + // as even unused nodes are added to the list, we expect the map size to be >1 + assert startSize <= endSize + assert nodemap[hostname] != null + assert roleHistory.cloneFailedNodes().contains(hostname) + + // add a failure of a node we've never head of + def newhost = "newhost" + nodesUpdated = [ + NodeReport.newInstance( + NodeId.newInstance(newhost, 0), + NodeState.LOST, + null, null, null, null, 1, null, 0) + ] + roleHistory.onNodesUpdated(nodesUpdated) + + def nodemap2 = roleHistory.cloneNodemap() + assert nodemap2.size() > endSize + assert roleHistory.cloneFailedNodes().contains(newhost) + assert nodemap2[newhost] + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/a66f7db8/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy index 9f5d939..ad586cd 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy @@ -26,7 +26,7 @@ import org.apache.hadoop.yarn.api.records.Resource import org.apache.hadoop.yarn.api.records.Token class MockContainer extends Container { - + ContainerId id; NodeId nodeId String nodeHttpAddress; http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/a66f7db8/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockFactory.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockFactory.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockFactory.groovy index fca3376..6071ef0 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockFactory.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockFactory.groovy @@ -23,6 +23,8 @@ import groovy.util.logging.Slf4j import org.apache.hadoop.yarn.api.records.ApplicationAttemptId import org.apache.hadoop.yarn.api.records.ApplicationId import org.apache.hadoop.yarn.api.records.ContainerId +import org.apache.hadoop.yarn.api.records.NodeId +import org.apache.hadoop.yarn.api.records.Priority import org.apache.hadoop.yarn.client.api.AMRMClient import org.apache.slider.api.ClusterDescription import org.apache.slider.api.ResourceKeys @@ -38,6 +40,10 @@ import org.apache.slider.providers.ProviderRole @Slf4j class MockFactory implements MockRoles { + /* + Ignore any IDE hints about needless references to the ROLE values; groovyc fails without them. + */ + public static final ProviderRole PROVIDER_ROLE0 = new ProviderRole( MockRoles.ROLE0, 0, @@ -58,6 +64,7 @@ class MockFactory implements MockRoles { PlacementPolicy.ANTI_AFFINITY_REQUIRED, 2, 2) + int appIdCount; int attemptIdCount; int containerIdCount; @@ -101,9 +108,9 @@ class MockFactory implements MockRoles { } MockNodeId newNodeId() { - MockNodeId nodeId = new MockNodeId() + new MockNodeId() } - + MockContainer newContainer(ContainerId cid) { MockContainer c = new MockContainer() c.id = cid @@ -114,6 +121,13 @@ class MockFactory implements MockRoles { newContainer(newContainerId()) } + MockContainer newContainer(NodeId nodeId, Priority priority) { + def container = newContainer(newContainerId()) + container.nodeId = nodeId + container.priority = priority + container + } + /** * Build a new container using the request to suppy priority and resource * @param req request
