ProportionalCapacityPreemptionPolicy buildPolicy(int[][] qData, String[][] resData, boolean useDominantResourceCalculator) { if (useDominantResourceCalculator) { when(mCS.getResourceCalculator()).thenReturn( new DominantResourceCalculator()); } ProportionalCapacityPreemptionPolicy policy = new ProportionalCapacityPreemptionPolicy(rmContext, mCS, mClock); clusterResources = leafAbsCapacities(parseResourceDetails(resData[0]), qData[2]); ParentQueue mRoot = buildMockRootQueue(rand, resData, qData); when(mCS.getRootQueue()).thenReturn(mRoot); setResourceAndNodeDetails(); return policy; }
ProportionalCapacityPreemptionPolicy buildPolicy(int[][] qData, String[][] resData) { return buildPolicy(qData, resData, false); }
ParentQueue buildMockRootQueue(Random r, int[]... queueData) { Resource[] abs = generateResourceList(queueData[0]); Resource[] used = generateResourceList(queueData[2]); Resource[] pending = generateResourceList(queueData[3]); Resource[] reserved = generateResourceList(queueData[4]); Resource[] gran = generateResourceList(queueData[6]); int[] maxCap = queueData[1]; int[] apps = queueData[5]; int[] queues = queueData[7]; return mockNested(abs, maxCap, used, pending, reserved, apps, gran, queues); }
ParentQueue buildMockRootQueue(Random r, String[][] resData, int[]... queueData) { Resource[] abs = parseResourceDetails(resData[0]); Resource[] used = parseResourceDetails(resData[1]); Resource[] pending = parseResourceDetails(resData[2]); Resource[] reserved = parseResourceDetails(resData[3]); Resource[] gran = parseResourceDetails(resData[4]); int[] maxCap = queueData[0]; int[] apps = queueData[1]; int[] queues = queueData[2]; return mockNested(abs, maxCap, used, pending, reserved, apps, gran, queues); }
ProportionalCapacityPreemptionPolicy buildPolicy(int[][] qData) { ProportionalCapacityPreemptionPolicy policy = new ProportionalCapacityPreemptionPolicy( rmContext, mCS, mClock); clusterResources = Resource.newInstance( leafAbsCapacities(qData[0], qData[7]), 0); ParentQueue mRoot = buildMockRootQueue(rand, qData); when(mCS.getRootQueue()).thenReturn(mRoot); setResourceAndNodeDetails(); return policy; }
ProportionalCapacityPreemptionPolicy policy = buildPolicy(qData); policy.editSchedule(); setup(); conf.setPreemptionDisabled("root.queueB", false); ProportionalCapacityPreemptionPolicy policy2 = buildPolicy(qData);
int[] queues) { ResourceCalculator rc = mCS.getResourceCalculator(); Resource tot = leafAbsCapacities(abs, queues); Deque<ParentQueue> pqs = new LinkedList<ParentQueue>(); ParentQueue root = mockParentQueue(null, queues[0], pqs); ResourceUsage resUsage = new ResourceUsage(); resUsage.setUsed(used[0]); when(root.getQueueResourceUsage()).thenReturn(resUsage); when(root.getQueuePath()).thenReturn("root"); boolean preemptionDisabled = mockPreemptionStatus("root"); when(root.getPreemptionDisabled()).thenReturn(preemptionDisabled); final String queueName = "queue" + ((char)('A' + i - 1)); if (queues[i] > 0) { q = mockParentQueue(p, queues[i], pqs); ResourceUsage resUsagePerQueue = new ResourceUsage(); resUsagePerQueue.setUsed(used[i]); when(q.getQueueResourceUsage()).thenReturn(resUsagePerQueue); } else { q = mockLeafQueue(p, tot, i, abs, used, pending, reserved, apps, gran); String queuePathName = (parentPathName+"."+queueName).replace("/","root"); when(q.getQueuePath()).thenReturn(queuePathName); preemptionDisabled = mockPreemptionStatus(queuePathName); when(q.getPreemptionDisabled()).thenReturn(preemptionDisabled);
@Test public void testContainerOrdering(){ List<RMContainer> containers = new ArrayList<RMContainer>(); ApplicationAttemptId appAttId = ApplicationAttemptId.newInstance( ApplicationId.newInstance(TS, 10), 0); // create a set of containers RMContainer rm1 = mockContainer(appAttId, 5, mock(Resource.class), 3); RMContainer rm2 = mockContainer(appAttId, 3, mock(Resource.class), 3); RMContainer rm3 = mockContainer(appAttId, 2, mock(Resource.class), 2); RMContainer rm4 = mockContainer(appAttId, 1, mock(Resource.class), 2); RMContainer rm5 = mockContainer(appAttId, 4, mock(Resource.class), 1); // insert them in non-sorted order containers.add(rm3); containers.add(rm2); containers.add(rm1); containers.add(rm5); containers.add(rm4); // sort them ProportionalCapacityPreemptionPolicy.sortContainers(containers); // verify the "priority"-first, "reverse container-id"-second // ordering is enforced correctly assert containers.get(0).equals(rm1); assert containers.get(1).equals(rm2); assert containers.get(2).equals(rm3); assert containers.get(3).equals(rm4); assert containers.get(4).equals(rm5); }
for (int a = 0; a < apps[i]; ++a) { FiCaSchedulerApp mockFiCaApp = mockApp(i, appAlloc, aUsed, aPending, aReserve, gran[i]); qApps.add(mockFiCaApp); ++appAlloc;
ProportionalCapacityPreemptionPolicy policy = buildPolicy(qData); policy.editSchedule(); setup(); schedConf.setPreemptionDisabled("root.queueB", false); ProportionalCapacityPreemptionPolicy policy2 = buildPolicy(qData);
int[] queues) { ResourceCalculator rc = mCS.getResourceCalculator(); Resource tot = leafAbsCapacities(abs, queues); Deque<ParentQueue> pqs = new LinkedList<ParentQueue>(); ParentQueue root = mockParentQueue(null, queues[0], pqs); ResourceUsage resUsage = new ResourceUsage(); resUsage.setUsed(used[0]); when(root.getQueueCapacities()).thenReturn(rootQc); when(root.getQueuePath()).thenReturn(CapacitySchedulerConfiguration.ROOT); boolean preemptionDisabled = mockPreemptionStatus("root"); when(root.getPreemptionDisabled()).thenReturn(preemptionDisabled); QueueResourceQuotas rootQr = new QueueResourceQuotas(); final String queueName = "queue" + ((char) ('A' + i - 1)); if (queues[i] > 0) { q = mockParentQueue(p, queues[i], pqs); ResourceUsage resUsagePerQueue = new ResourceUsage(); resUsagePerQueue.setUsed(used[i]); when(q.getQueueResourceUsage()).thenReturn(resUsagePerQueue); } else { q = mockLeafQueue(p, tot, i, abs, used, pending, reserved, apps, gran); "root"); when(q.getQueuePath()).thenReturn(queuePathName); preemptionDisabled = mockPreemptionStatus(queuePathName); when(q.getPreemptionDisabled()).thenReturn(preemptionDisabled);
ProportionalCapacityPreemptionPolicy buildPolicy(int[][] qData) { ProportionalCapacityPreemptionPolicy policy = new ProportionalCapacityPreemptionPolicy(conf, rmContext, mCS, mClock); clusterResources = Resource.newInstance(leafAbsCapacities(qData[0], qData[7]), 0); ParentQueue mRoot = buildMockRootQueue(rand, qData); when(mCS.getRootQueue()).thenReturn(mRoot); setResourceAndNodeDetails(); return policy; }
private ParentQueue buildMockRootQueue(Random rand2, String[][] resData, int[][] queueData) { Resource[] abs = parseResourceDetails(resData[0]); Resource[] used = parseResourceDetails(resData[1]); Resource[] pending = parseResourceDetails(resData[2]); Resource[] reserved = parseResourceDetails(resData[3]); Resource[] gran = parseResourceDetails(resData[4]); int[] maxCap = queueData[0]; int[] apps = queueData[1]; int[] queues = queueData[2]; return mockNested(abs, maxCap, used, pending, reserved, apps, gran, queues); }
@Test public void testContainerOrdering(){ List<RMContainer> containers = new ArrayList<RMContainer>(); ApplicationAttemptId appAttId = ApplicationAttemptId.newInstance( ApplicationId.newInstance(TS, 10), 0); // create a set of containers RMContainer rm1 = mockContainer(appAttId, 5, mock(Resource.class), 3); RMContainer rm2 = mockContainer(appAttId, 3, mock(Resource.class), 3); RMContainer rm3 = mockContainer(appAttId, 2, mock(Resource.class), 2); RMContainer rm4 = mockContainer(appAttId, 1, mock(Resource.class), 2); RMContainer rm5 = mockContainer(appAttId, 4, mock(Resource.class), 1); // insert them in non-sorted order containers.add(rm3); containers.add(rm2); containers.add(rm1); containers.add(rm5); containers.add(rm4); // sort them FifoCandidatesSelector.sortContainers(containers); // verify the "priority"-first, "reverse container-id"-second // ordering is enforced correctly assert containers.get(0).equals(rm1); assert containers.get(1).equals(rm2); assert containers.get(2).equals(rm3); assert containers.get(3).equals(rm4); assert containers.get(4).equals(rm5); }
for (int a = 0; a < apps[i]; ++a) { FiCaSchedulerApp mockFiCaApp = mockApp(i, appAlloc, aUsed, aPending, aReserve, gran[i]); qApps.add(mockFiCaApp); ++appAlloc;
@Test public void testIgnore() { ProportionalCapacityPreemptionPolicy policy = buildPolicy(Q_DATA_FOR_IGNORE); policy.editSchedule(); // don't correct imbalances without demand verify(mDisp, never()).handle(isA(ContainerPreemptEvent.class)); }
ProportionalCapacityPreemptionPolicy buildPolicy(int[][] qData, String[][] resData, boolean useDominantResourceCalculator) { if (useDominantResourceCalculator) { when(mCS.getResourceCalculator()).thenReturn( new DominantResourceCalculator()); } ProportionalCapacityPreemptionPolicy policy = new ProportionalCapacityPreemptionPolicy( conf, rmContext, mCS, mClock); clusterResources = leafAbsCapacities(parseResourceDetails(resData[0]), qData[2]); ParentQueue mRoot = buildMockRootQueue(rand, resData, qData); when(mCS.getRootQueue()).thenReturn(mRoot); setResourceAndNodeDetails(); return policy; }
}; ProportionalCapacityPreemptionPolicy policy = buildPolicy(qData); policy.editSchedule(); setup(); // Call setup() to reset mDisp conf.setPreemptionDisabled("root.queueA", true); ProportionalCapacityPreemptionPolicy policy2 = buildPolicy(qData); policy2.editSchedule(); verify(mDisp, never()).handle(argThat(new IsPreemptionRequestFor(appA))); // queueC
ParentQueue buildMockRootQueue(Random r, int[]... queueData) { Resource[] abs = generateResourceList(queueData[0]); Resource[] used = generateResourceList(queueData[2]); Resource[] pending = generateResourceList(queueData[3]); Resource[] reserved = generateResourceList(queueData[4]); Resource[] gran = generateResourceList(queueData[6]); int[] maxCap = queueData[1]; int[] apps = queueData[5]; int[] queues = queueData[7]; return mockNested(abs, maxCap, used, pending, reserved, apps, gran, queues); }
for (; Resources.lessThan(rc, clusterResources, resIter, reserved); Resources .addTo(resIter, gran)) { cReserved.add(mockContainer(appAttId, cAlloc, unit, priority.CONTAINER.getValue())); ++cAlloc; .addTo(usedIter, gran)) { if (setAMContainer && i == 0) { cLive.add(mockContainer(appAttId, cAlloc, unit, priority.AMCONTAINER.getValue())); } else if (setLabeledContainer && i == 1) { cLive.add(mockContainer(appAttId, cAlloc, unit, priority.LABELEDCONTAINER.getValue())); } else { cLive.add(mockContainer(appAttId, cAlloc, unit, priority.CONTAINER.getValue()));