[
https://issues.apache.org/jira/browse/YARN-11226?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17608317#comment-17608317
]
ASF GitHub Bot commented on YARN-11226:
---------------------------------------
slfan1989 commented on code in PR #4892:
URL: https://github.com/apache/hadoop/pull/4892#discussion_r977767475
##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestFederationInterceptorREST.java:
##########
@@ -1127,4 +1141,205 @@ public void testListReservation() throws Exception {
Assert.assertEquals(1, vCore);
Assert.assertEquals(1024, memory);
}
+
+ @Test
+ public void testCreateNewReservation() throws Exception {
+ Response response = interceptor.createNewReservation(null);
+ Assert.assertNotNull(response);
+
+ Object entity = response.getEntity();
+ Assert.assertNotNull(entity);
+ Assert.assertTrue(entity instanceof NewReservation);
+
+ NewReservation newReservation = (NewReservation) entity;
+ Assert.assertNotNull(newReservation);
+
Assert.assertTrue(newReservation.getReservationId().contains("reservation"));
+ }
+
+ @Test
+ public void testSubmitReservation() throws Exception {
+
+ // submit reservation
+ ReservationId reservationId = ReservationId.newInstance(Time.now(), 2);
+ Response response = submitReservation(reservationId);
+ Assert.assertNotNull(response);
+ Assert.assertEquals(Status.ACCEPTED.getStatusCode(), response.getStatus());
+
+ String applyReservationId = reservationId.toString();
+ Response reservationResponse = interceptor.listReservation(
+ QUEUE_DEDICATED_FULL, applyReservationId, -1, -1, false, null);
+ Assert.assertNotNull(reservationResponse);
+
+ Object entity = reservationResponse.getEntity();
+ Assert.assertNotNull(entity);
+ Assert.assertNotNull(entity instanceof ReservationListInfo);
+
+ ReservationListInfo listInfo = (ReservationListInfo) entity;
+ Assert.assertNotNull(listInfo);
+
+ List<ReservationInfo> reservationInfos = listInfo.getReservations();
+ Assert.assertNotNull(reservationInfos);
+ Assert.assertEquals(1, reservationInfos.size());
+
+ ReservationInfo reservationInfo = reservationInfos.get(0);
+ Assert.assertNotNull(reservationInfo);
+ Assert.assertEquals(reservationInfo.getReservationId(),
applyReservationId);
+ }
+
+ @Test
+ public void testUpdateReservation() throws Exception {
+ // submit reservation
+ ReservationId reservationId = ReservationId.newInstance(Time.now(), 3);
+ Response response = submitReservation(reservationId);
+ Assert.assertNotNull(response);
+ Assert.assertEquals(Status.ACCEPTED.getStatusCode(), response.getStatus());
+
+ // update reservation
+ ReservationSubmissionRequest resSubRequest =
+ getReservationSubmissionRequest(reservationId, 6, 2048, 2);
+ ReservationDefinition reservationDefinition =
resSubRequest.getReservationDefinition();
+ ReservationDefinitionInfo reservationDefinitionInfo =
+ new ReservationDefinitionInfo(reservationDefinition);
+
+ ReservationUpdateRequestInfo updateRequestInfo = new
ReservationUpdateRequestInfo();
+ updateRequestInfo.setReservationId(reservationId.toString());
+ updateRequestInfo.setReservationDefinition(reservationDefinitionInfo);
+ Response updateReservationResp =
interceptor.updateReservation(updateRequestInfo, null);
+ Assert.assertNotNull(updateReservationResp);
+ Assert.assertEquals(Status.OK.getStatusCode(),
updateReservationResp.getStatus());
+
+ String applyReservationId = reservationId.toString();
+ Response reservationResponse = interceptor.listReservation(
+ QUEUE_DEDICATED_FULL, applyReservationId, -1, -1, false, null);
+ Assert.assertNotNull(reservationResponse);
+
+ Object entity = reservationResponse.getEntity();
+ Assert.assertNotNull(entity);
+ Assert.assertNotNull(entity instanceof ReservationListInfo);
+
+ ReservationListInfo listInfo = (ReservationListInfo) entity;
+ Assert.assertNotNull(listInfo);
+
+ List<ReservationInfo> reservationInfos = listInfo.getReservations();
+ Assert.assertNotNull(reservationInfos);
+ Assert.assertEquals(1, reservationInfos.size());
+
+ ReservationInfo reservationInfo = reservationInfos.get(0);
+ Assert.assertNotNull(reservationInfo);
+ Assert.assertEquals(reservationInfo.getReservationId(),
applyReservationId);
+
+ ReservationDefinitionInfo resDefinitionInfo =
reservationInfo.getReservationDefinition();
+ Assert.assertNotNull(resDefinitionInfo);
+
+ ReservationRequestsInfo reservationRequestsInfo =
resDefinitionInfo.getReservationRequests();
+ Assert.assertNotNull(reservationRequestsInfo);
+
+ ArrayList<ReservationRequestInfo> reservationRequestInfoList =
+ reservationRequestsInfo.getReservationRequest();
+ Assert.assertNotNull(reservationRequestInfoList);
+ Assert.assertEquals(1, reservationRequestInfoList.size());
+
+ ReservationRequestInfo reservationRequestInfo =
reservationRequestInfoList.get(0);
+ Assert.assertNotNull(reservationRequestInfo);
+ Assert.assertEquals(6, reservationRequestInfo.getNumContainers());
+
+ ResourceInfo resourceInfo = reservationRequestInfo.getCapability();
+ Assert.assertNotNull(resourceInfo);
+
+ int vCore = resourceInfo.getvCores();
+ long memory = resourceInfo.getMemorySize();
+ Assert.assertEquals(2, vCore);
+ Assert.assertEquals(2048, memory);
+ }
+
+ @Test
+ public void testDeleteReservation() throws Exception {
+ // submit reservation
+ ReservationId reservationId = ReservationId.newInstance(Time.now(), 4);
+ Response response = submitReservation(reservationId);
+ Assert.assertNotNull(response);
+ Assert.assertEquals(Status.ACCEPTED.getStatusCode(), response.getStatus());
+
+ String applyResId = reservationId.toString();
+ Response reservationResponse = interceptor.listReservation(
+ QUEUE_DEDICATED_FULL, applyResId, -1, -1, false, null);
+ Assert.assertNotNull(reservationResponse);
+
+ ReservationDeleteRequestInfo deleteRequestInfo =
+ new ReservationDeleteRequestInfo();
+ deleteRequestInfo.setReservationId(applyResId);
+ Response delResponse = interceptor.deleteReservation(deleteRequestInfo,
null);
+ Assert.assertNotNull(delResponse);
+
+ LambdaTestUtils.intercept(Exception.class,
+ "reservationId with id: " + reservationId + " not found",
+ () -> interceptor.listReservation(QUEUE_DEDICATED_FULL, applyResId,
-1, -1, false, null));
+ }
+
+ private Response submitReservation(ReservationId reservationId)
+ throws IOException, InterruptedException, YarnException {
+
+ SubClusterId homeSubClusterId = subClusters.get(0);
+ ReservationHomeSubCluster reservationHomeSubCluster =
+ ReservationHomeSubCluster.newInstance(reservationId, homeSubClusterId);
+ AddReservationHomeSubClusterRequest request =
+
AddReservationHomeSubClusterRequest.newInstance(reservationHomeSubCluster);
+ stateStore.addReservationHomeSubCluster(request);
+
+ ReservationSubmissionRequestInfo resSubmissionRequestInfo =
+ getReservationSubmissionRequestInfo(reservationId);
+ Response response =
interceptor.submitReservation(resSubmissionRequestInfo, null);
+ return response;
+ }
+
+ private ReservationSubmissionRequestInfo getReservationSubmissionRequestInfo(
+ ReservationId reservationId) {
+
+ ReservationSubmissionRequest resSubRequest =
+ getReservationSubmissionRequest(reservationId, NUM_CONTAINERS, 1024,
1);
+ ReservationDefinition reservationDefinition =
resSubRequest.getReservationDefinition();
+
+ ReservationSubmissionRequestInfo resSubmissionRequestInfo =
+ new ReservationSubmissionRequestInfo();
+ resSubmissionRequestInfo.setQueue(resSubRequest.getQueue());
+ resSubmissionRequestInfo.setReservationId(reservationId.toString());
+ ReservationDefinitionInfo reservationDefinitionInfo =
+ new ReservationDefinitionInfo(reservationDefinition);
+
resSubmissionRequestInfo.setReservationDefinition(reservationDefinitionInfo);
+
+ return resSubmissionRequestInfo;
+ }
+
+ private ReservationSubmissionRequest getReservationSubmissionRequest(
+ ReservationId reservationId, int numContainers, int memory, int vcore) {
+
+ // arrival time from which the resource(s) can be allocated.
+ long arrival = Time.now();
+
+ // deadline by when the resource(s) must be allocated.
+ // The reason for choosing 1.05 is because this gives an integer
+ // DURATION * 0.05 = 3000(ms)
+ // deadline = arrival + 3000ms
+ long deadline = (long) (arrival + 1.05 * DURATION);
+
+ ReservationSubmissionRequest submissionRequest =
createSimpleReservationRequest(
+ reservationId, numContainers, arrival, deadline, DURATION, memory,
vcore);
+
+ return submissionRequest;
+ }
+
+ public static ReservationSubmissionRequest createSimpleReservationRequest(
+ ReservationId reservationId, int numContainers, long arrival,
+ long deadline, long duration, int memory, int vcore) {
+ // create a request with a single atomic ask
+ ReservationRequest r = ReservationRequest
+ .newInstance(Resource.newInstance(memory, vcore), numContainers, 1,
duration);
+ ReservationRequests reqs = ReservationRequests.newInstance(
+ Collections.singletonList(r), ReservationRequestInterpreter.R_ALL);
+ ReservationDefinition rDef = ReservationDefinition.newInstance(arrival,
+ deadline, reqs, "testClientRMService#reservation", "0",
Priority.UNDEFINED);
+ ReservationSubmissionRequest request = ReservationSubmissionRequest
Review Comment:
I will fix it.
> [Federation] Add createNewReservation, submitReservation, updateReservation,
> deleteReservation REST APIs for Router
> -------------------------------------------------------------------------------------------------------------------
>
> Key: YARN-11226
> URL: https://issues.apache.org/jira/browse/YARN-11226
> Project: Hadoop YARN
> Issue Type: Sub-task
> Components: federation
> Affects Versions: 3.4.0, 3.3.4
> Reporter: fanshilun
> Assignee: fanshilun
> Priority: Major
> Labels: pull-request-available
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]