.add(ResourceRequest.newInstance(Priority.newInstance(amPriority), "*", Resources.clone(Resources.none()), 1)); appContext.setAMContainerResourceRequests(amResourceRequests);
appContext.setAMContainerResourceRequests(amResourceRequests);
@Test public void testRMAppSubmitResource() throws Exception { asContext.setResource(Resources.createResource(1024)); asContext.setAMContainerResourceRequests(null); RMApp app = testRMAppSubmit(); // setResource Assert.assertEquals(Collections.singletonList( ResourceRequest.newInstance(RMAppAttemptImpl.AM_CONTAINER_PRIORITY, ResourceRequest.ANY, Resources.createResource(1024), 1, true, "")), app.getAMResourceRequests()); }
@Public @Stable public static ApplicationSubmissionContext newInstance( ApplicationId applicationId, String applicationName, String queue, ContainerLaunchContext amContainer, boolean isUnmanagedAM, boolean cancelTokensWhenComplete, int maxAppAttempts, String applicationType, boolean keepContainers, String appLabelExpression, ResourceRequest resourceRequest) { ApplicationSubmissionContext context = Records.newRecord(ApplicationSubmissionContext.class); context.setApplicationId(applicationId); context.setApplicationName(applicationName); context.setQueue(queue); context.setAMContainerSpec(amContainer); context.setUnmanagedAM(isUnmanagedAM); context.setCancelTokensWhenComplete(cancelTokensWhenComplete); context.setMaxAppAttempts(maxAppAttempts); context.setApplicationType(applicationType); context.setKeepContainersAcrossApplicationAttempts(keepContainers); context.setNodeLabelExpression(appLabelExpression); context.setAMContainerResourceRequests( Collections.singletonList(resourceRequest)); return context; }
@Test public void testRMAppSubmitNoResourceRequests() throws Exception { asContext.setResource(null); asContext.setAMContainerResourceRequests(null); try { testRMAppSubmit(); Assert.fail("Should have failed due to no ResourceRequest"); } catch (InvalidResourceRequestException e) { Assert.assertEquals( "Invalid resource request, no resources requested", e.getMessage()); } }
@Test public void testRMAppSubmitAMContainerResourceRequestsTwoManyAny() throws Exception { asContext.setResource(null); List<ResourceRequest> reqs = new ArrayList<>(); reqs.add(ResourceRequest.newInstance(Priority.newInstance(1), ResourceRequest.ANY, Resources.createResource(1025), 1, false)); reqs.add(ResourceRequest.newInstance(Priority.newInstance(1), ResourceRequest.ANY, Resources.createResource(1025), 1, false)); asContext.setAMContainerResourceRequests(cloneResourceRequests(reqs)); // getAMContainerResourceRequest uses the first entry of // getAMContainerResourceRequests Assert.assertEquals(reqs, asContext.getAMContainerResourceRequests()); try { testRMAppSubmit(); Assert.fail("Should have failed due to too many ANY ResourceRequests"); } catch (InvalidResourceRequestException e) { Assert.assertEquals( "Invalid resource request, only one resource request with * is " + "allowed", e.getMessage()); } }
@Test public void testRMAppSubmitAMContainerResourceRequestsNoAny() throws Exception { asContext.setResource(null); List<ResourceRequest> reqs = new ArrayList<>(); reqs.add(ResourceRequest.newInstance(Priority.newInstance(1), "/rack", Resources.createResource(1025), 1, false)); reqs.add(ResourceRequest.newInstance(Priority.newInstance(1), "/rack/node", Resources.createResource(1025), 1, true)); asContext.setAMContainerResourceRequests(cloneResourceRequests(reqs)); // getAMContainerResourceRequest uses the first entry of // getAMContainerResourceRequests Assert.assertEquals(reqs, asContext.getAMContainerResourceRequests()); try { testRMAppSubmit(); Assert.fail("Should have failed due to missing ANY ResourceRequest"); } catch (InvalidResourceRequestException e) { Assert.assertEquals( "Invalid resource request, no resource request specified with *", e.getMessage()); } }
ResourceRequest.newInstance(Priority.newInstance(0), ResourceRequest.ANY, Resource.newInstance(1024, 1), 1); sub.setAMContainerResourceRequests(Collections.singletonList(resReg)); req.setApplicationSubmissionContext(sub); sub.setAMContainerSpec(mock(ContainerLaunchContext.class));
@SuppressWarnings("deprecation") @Test public void testRMAppSubmitAMContainerResourceRequests() throws Exception { asContext.setResource(Resources.createResource(1024)); asContext.setAMContainerResourceRequest( ResourceRequest.newInstance(Priority.newInstance(0), ResourceRequest.ANY, Resources.createResource(1024), 1, true)); List<ResourceRequest> reqs = new ArrayList<>(); reqs.add(ResourceRequest.newInstance(Priority.newInstance(0), ResourceRequest.ANY, Resources.createResource(1025), 1, false)); reqs.add(ResourceRequest.newInstance(Priority.newInstance(0), "/rack", Resources.createResource(1025), 1, false)); reqs.add(ResourceRequest.newInstance(Priority.newInstance(0), "/rack/node", Resources.createResource(1025), 1, true)); asContext.setAMContainerResourceRequests(cloneResourceRequests(reqs)); // getAMContainerResourceRequest uses the first entry of // getAMContainerResourceRequests Assert.assertEquals(reqs.get(0), asContext.getAMContainerResourceRequest()); Assert.assertEquals(reqs, asContext.getAMContainerResourceRequests()); RMApp app = testRMAppSubmit(); for (ResourceRequest req : reqs) { req.setNodeLabelExpression(RMNodeLabelsManager.NO_LABEL); } // setAMContainerResourceRequests has priority over // setAMContainerResourceRequest and setResource Assert.assertEquals(reqs, app.getAMResourceRequests()); }
@SuppressWarnings("deprecation") @Test public void testRMAppSubmitAMContainerResourceRequest() throws Exception { asContext.setResource(Resources.createResource(1024)); asContext.setAMContainerResourceRequests(null); ResourceRequest req = ResourceRequest.newInstance(Priority.newInstance(0), ResourceRequest.ANY, Resources.createResource(1025), 1, true); req.setNodeLabelExpression(RMNodeLabelsManager.NO_LABEL); asContext.setAMContainerResourceRequest(ResourceRequest.clone(req)); // getAMContainerResourceRequests uses a singleton list of // getAMContainerResourceRequest Assert.assertEquals(req, asContext.getAMContainerResourceRequest()); Assert.assertEquals(req, asContext.getAMContainerResourceRequests().get(0)); Assert.assertEquals(1, asContext.getAMContainerResourceRequests().size()); RMApp app = testRMAppSubmit(); // setAMContainerResourceRequest has priority over setResource Assert.assertEquals(Collections.singletonList(req), app.getAMResourceRequests()); }
amReq.setRelaxLocality(true); amReq.setNodeLabelExpression(amContainerLabelExpression); context.setAMContainerResourceRequests(Collections.singletonList(amReq)); return context;
@Test public void testRMAppSubmitAMContainerResourceRequestsDisagree() throws Exception { asContext.setResource(null); List<ResourceRequest> reqs = new ArrayList<>(); when(mockDefaultQueueInfo.getAccessibleNodeLabels()).thenReturn (new HashSet<String>() {{ add("label1"); add(""); }}); ResourceRequest anyReq = ResourceRequest.newInstance( Priority.newInstance(1), ResourceRequest.ANY, Resources.createResource(1024), 1, false, "label1", ExecutionTypeRequest.newInstance(ExecutionType.GUARANTEED)); reqs.add(anyReq); reqs.add(ResourceRequest.newInstance(Priority.newInstance(2), "/rack", Resources.createResource(1025), 2, false, "", ExecutionTypeRequest.newInstance(ExecutionType.OPPORTUNISTIC))); reqs.add(ResourceRequest.newInstance(Priority.newInstance(3), "/rack/node", Resources.createResource(1026), 3, true, "", ExecutionTypeRequest.newInstance(ExecutionType.OPPORTUNISTIC))); asContext.setAMContainerResourceRequests(cloneResourceRequests(reqs)); RMApp app = testRMAppSubmit(); // It should force the requests to all agree on these points for (ResourceRequest req : reqs) { req.setCapability(anyReq.getCapability()); req.setExecutionTypeRequest( ExecutionTypeRequest.newInstance(ExecutionType.GUARANTEED)); req.setNumContainers(1); req.setPriority(Priority.newInstance(0)); } Assert.assertEquals(reqs, app.getAMResourceRequests()); }
context.setKeepContainersAcrossApplicationAttempts( oldAppSubCtxt.getKeepContainersAcrossApplicationAttempts()); context.setAMContainerResourceRequests( oldAppSubCtxt.getAMContainerResourceRequests()); context.setLogAggregationContext(oldAppSubCtxt.getLogAggregationContext());
sub.setAMContainerResourceRequests(amResourceRequests); req.setApplicationSubmissionContext(sub); UserGroupInformation fakeUser =