[ https://issues.apache.org/jira/browse/YARN-5829?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15941427#comment-15941427 ]
ASF GitHub Bot commented on YARN-5829: -------------------------------------- Github user kambatla commented on a diff in the pull request: https://github.com/apache/hadoop/pull/201#discussion_r108023320 --- Diff: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFSSchedulerNode.java --- @@ -0,0 +1,376 @@ +package org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair; + +import org.apache.hadoop.yarn.api.records.*; +import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer; +import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode; +import org.apache.hadoop.yarn.util.resource.Resources; +import org.junit.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * Test scheduler node, especially preemption reservations. + */ +public class TestFSSchedulerNode { + private long containerNum = 0; + private ArrayList<RMContainer> containers = new ArrayList<>(); + + private RMNode createNode() { + RMNode node = mock(RMNode.class); + when(node.getTotalCapability()).thenReturn(Resource.newInstance(8192, 8)); + when(node.getHostName()).thenReturn("host.domain.com"); + return node; + } + + private RMContainer createDefaultContainer() { + return createContainer(Resource.newInstance(1024, 1), null); + } + + private RMContainer createContainer( + Resource request, ApplicationAttemptId appAttemptId) { + RMContainer container = mock(RMContainer.class); + Container containerInner = mock(Container.class); + ContainerId id = mock(ContainerId.class); + when(id.getContainerId()).thenReturn(containerNum); + when(containerInner.getResource()). + thenReturn(Resources.clone(request)); + when(containerInner.getId()).thenReturn(id); + when(containerInner.getExecutionType()). + thenReturn(ExecutionType.GUARANTEED); + when(container.getApplicationAttemptId()).thenReturn(appAttemptId); + when(container.getContainerId()).thenReturn(id); + when(container.getContainer()).thenReturn(containerInner); + when(container.getExecutionType()).thenReturn(ExecutionType.GUARANTEED); + when(container.getAllocatedResource()). + thenReturn(Resources.clone(request)); + containers.add(container); + containerNum++; + return container; + } + + private void saturateCluster(FSSchedulerNode schedulerNode) { + while (!Resources.isNone(schedulerNode.getUnallocatedResource())) { + createDefaultContainer(); + schedulerNode.allocateContainer(containers.get((int)containerNum - 1)); --- End diff -- You don't need to typecast if you change it to int. > FS preemption should reserve a node before considering containers on it for > preemption > -------------------------------------------------------------------------------------- > > Key: YARN-5829 > URL: https://issues.apache.org/jira/browse/YARN-5829 > Project: Hadoop YARN > Issue Type: Sub-task > Components: fairscheduler > Reporter: Karthik Kambatla > Assignee: Miklos Szegedi > > FS preemption evaluates nodes for preemption, and subsequently preempts > identified containers. If this node is not reserved for a specific > application, any other application could be allocated resources on this node. > Reserving the node for the starved application before preempting containers > would help avoid this. -- This message was sent by Atlassian JIRA (v6.3.15#6346) --------------------------------------------------------------------- To unsubscribe, e-mail: yarn-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: yarn-issues-h...@hadoop.apache.org