diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ReservationDefinition.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ReservationDefinition.java index 8ef881b..4d63957 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ReservationDefinition.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ReservationDefinition.java @@ -38,7 +38,7 @@ @Unstable public static ReservationDefinition newInstance(long arrival, long deadline, ReservationRequests reservationRequests, String name, - String recurrenceExpression) { + String recurrenceExpression, int priority) { ReservationDefinition rDefinition = Records.newRecord(ReservationDefinition.class); rDefinition.setArrival(arrival); @@ -46,15 +46,16 @@ public static ReservationDefinition newInstance(long arrival, long deadline, rDefinition.setReservationRequests(reservationRequests); rDefinition.setReservationName(name); rDefinition.setRecurrenceExpression(recurrenceExpression); + rDefinition.setPriority(priority); return rDefinition; } @Public @Unstable public static ReservationDefinition newInstance(long arrival, long deadline, - ReservationRequests reservationRequests, String name) { - ReservationDefinition rDefinition = - newInstance(arrival, deadline, reservationRequests, name, "0"); + ReservationRequests reservationRequests, String name, int priority) { + ReservationDefinition rDefinition = newInstance(arrival, deadline, + reservationRequests, name, "0", priority); return rDefinition; } @@ -181,4 +182,24 @@ public abstract void setReservationRequests( @Evolving public abstract void setRecurrenceExpression(String recurrenceExpression); + /** + * Get the priority for this reservation. + * + * @return int representing the priority of the reserved resource + * allocation in the scheduler + */ + @Public + @Evolving + public abstract int getPriority(); + + /** + * Set the priority for this reservation. + * + * @param priority representing the priority of the reserved resource + * allocation in the scheduler + */ + @Public + @Evolving + public abstract void setPriority(int priority); + } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto index 2d6007e..44d93fa 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto @@ -479,6 +479,7 @@ message ReservationDefinitionProto { optional int64 deadline = 3; optional string reservation_name = 4; optional string recurrence_expression = 5 [default = "0"]; + optional int32 priority = 6; } message ResourceAllocationRequestProto { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java index 19966ad..e2d69fd 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java @@ -79,7 +79,6 @@ import org.apache.hadoop.yarn.api.protocolrecords.ReservationListRequest; import org.apache.hadoop.yarn.api.protocolrecords.ReservationListResponse; import org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionRequest; -import org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionResponse; import org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateRequest; import org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateResponse; import org.apache.hadoop.yarn.api.protocolrecords.SignalContainerRequest; @@ -1252,14 +1251,12 @@ private YarnClient setupYarnClient(MiniYARNCluster cluster) { } private ReservationSubmissionRequest submitReservationTestHelper( - YarnClient client, long arrival, long deadline, long duration) - throws IOException, YarnException { + YarnClient client, long arrival, long deadline, long duration, + int priority) throws IOException, YarnException { ReservationId reservationID = client.createReservation().getReservationId(); ReservationSubmissionRequest sRequest = createSimpleReservationRequest( - reservationID, 4, arrival, deadline, duration); - ReservationSubmissionResponse sResponse = - client.submitReservation(sRequest); - Assert.assertNotNull(sResponse); + reservationID, 4, arrival, deadline, duration, priority); + Assert.assertNotNull(client.submitReservation(sRequest)); Assert.assertNotNull(reservationID); System.out.println("Submit reservation response: " + reservationID); @@ -1276,7 +1273,7 @@ public void testCreateReservation() throws Exception { long duration = 60000; long deadline = (long) (arrival + 1.05 * duration); ReservationSubmissionRequest sRequest = - submitReservationTestHelper(client, arrival, deadline, duration); + submitReservationTestHelper(client, arrival, deadline, duration, 0); // Submit the reservation again with the same request and make sure it // passes. @@ -1315,7 +1312,7 @@ public void testUpdateReservation() throws Exception { long duration = 60000; long deadline = (long) (arrival + 1.05 * duration); ReservationSubmissionRequest sRequest = - submitReservationTestHelper(client, arrival, deadline, duration); + submitReservationTestHelper(client, arrival, deadline, duration, 0); ReservationDefinition rDef = sRequest.getReservationDefinition(); ReservationRequest rr = @@ -1352,7 +1349,7 @@ public void testListReservationsByReservationId() throws Exception{ long duration = 60000; long deadline = (long) (arrival + 1.05 * duration); ReservationSubmissionRequest sRequest = - submitReservationTestHelper(client, arrival, deadline, duration); + submitReservationTestHelper(client, arrival, deadline, duration, 0); ReservationId reservationID = sRequest.getReservationId(); ReservationListRequest request = ReservationListRequest.newInstance( @@ -1384,7 +1381,7 @@ public void testListReservationsByTimeInterval() throws Exception { long duration = 60000; long deadline = (long) (arrival + 1.05 * duration); ReservationSubmissionRequest sRequest = - submitReservationTestHelper(client, arrival, deadline, duration); + submitReservationTestHelper(client, arrival, deadline, duration, 0); // List reservations, search by a point in time within the reservation // range. @@ -1439,7 +1436,7 @@ public void testListReservationsByInvalidTimeInterval() throws Exception { long duration = 60000; long deadline = (long) (arrival + 1.05 * duration); ReservationSubmissionRequest sRequest = - submitReservationTestHelper(client, arrival, deadline, duration); + submitReservationTestHelper(client, arrival, deadline, duration, 0); // List reservations, search by invalid end time == -1. ReservationListRequest request = ReservationListRequest @@ -1480,7 +1477,7 @@ public void testListReservationsByTimeIntervalContainingNoReservations() long duration = 60000; long deadline = (long) (arrival + 1.05 * duration); ReservationSubmissionRequest sRequest = - submitReservationTestHelper(client, arrival, deadline, duration); + submitReservationTestHelper(client, arrival, deadline, duration, 0); // List reservations, search by very large start time. ReservationListRequest request = ReservationListRequest.newInstance( @@ -1550,7 +1547,7 @@ public void testReservationDelete() throws Exception { long duration = 60000; long deadline = (long) (arrival + 1.05 * duration); ReservationSubmissionRequest sRequest = - submitReservationTestHelper(client, arrival, deadline, duration); + submitReservationTestHelper(client, arrival, deadline, duration, 0); ReservationId reservationID = sRequest.getReservationId(); // Delete the reservation @@ -1579,7 +1576,7 @@ public void testReservationDelete() throws Exception { private ReservationSubmissionRequest createSimpleReservationRequest( ReservationId reservationId, int numContainers, long arrival, - long deadline, long duration) { + long deadline, long duration, int priority) { // create a request with a single atomic ask ReservationRequest r = ReservationRequest.newInstance(Resource.newInstance(1024, 1), @@ -1589,7 +1586,7 @@ private ReservationSubmissionRequest createSimpleReservationRequest( ReservationRequestInterpreter.R_ALL); ReservationDefinition rDef = ReservationDefinition.newInstance(arrival, deadline, reqs, - "testYarnClient#reservation"); + "testYarnClient#reservation", priority); ReservationSubmissionRequest request = ReservationSubmissionRequest.newInstance(rDef, ReservationSystemTestUtil.reservationQ, reservationId); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ReservationDefinitionPBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ReservationDefinitionPBImpl.java index b30cd2a..7c9890c 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ReservationDefinitionPBImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ReservationDefinitionPBImpl.java @@ -150,6 +150,21 @@ public void setReservationName(String name) { builder.setReservationName(name); } + @Override + public int getPriority() { + ReservationDefinitionProtoOrBuilder p = viaProto ? proto : builder; + if (!p.hasPriority()) { + return 0; + } + return (p.getPriority()); + } + + @Override + public void setPriority(int priority) { + maybeInitBuilder(); + builder.setPriority(priority); + } + private ReservationRequestsPBImpl convertFromProtoFormat( ReservationRequestsProto p) { return new ReservationRequestsPBImpl(p); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java index 99440a8..5a172b0 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java @@ -2144,7 +2144,8 @@ private ReservationSubmissionRequest createReservationSubmissionRequest( ReservationRequests reqs = ReservationRequests.newInstance(list, resInt); ReservationDefinition rDef = ReservationDefinition.newInstance(resInfo.getArrival(), - resInfo.getDeadline(), reqs, resInfo.getReservationName()); + resInfo.getDeadline(), reqs, resInfo.getReservationName(), + resInfo.getPriority()); ReservationId reservationId = ReservationId.parseReservationId(resContext .getReservationId()); @@ -2257,7 +2258,8 @@ private ReservationUpdateRequest createReservationUpdateRequest( ReservationRequests reqs = ReservationRequests.newInstance(list, resInt); ReservationDefinition rDef = ReservationDefinition.newInstance(resInfo.getArrival(), - resInfo.getDeadline(), reqs, resInfo.getReservationName()); + resInfo.getDeadline(), reqs, resInfo.getReservationName(), + resInfo.getPriority()); ReservationUpdateRequest request = ReservationUpdateRequest.newInstance(rDef, ReservationId .parseReservationId(resContext.getReservationId())); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/ReservationDefinitionInfo.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/ReservationDefinitionInfo.java index 71ee924..42a07af 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/ReservationDefinitionInfo.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/ReservationDefinitionInfo.java @@ -44,6 +44,9 @@ @XmlElement(name = "reservation-name") private String reservationName; + @XmlElement(name = "priority") + private int priority; + public ReservationDefinitionInfo() { } @@ -89,4 +92,12 @@ public void setReservationName(String reservationName) { this.reservationName = reservationName; } + public int getPriority() { + return priority; + } + + public void setPriority(int priority) { + this.priority = priority; + } + } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/ReservationACLsTestBase.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/ReservationACLsTestBase.java index c536d8d..56475a8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/ReservationACLsTestBase.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/ReservationACLsTestBase.java @@ -388,9 +388,9 @@ private ReservationDefinition makeSimpleReservationDefinition() { long arrival = System.currentTimeMillis(); String reservationName = UUID.randomUUID().toString(); - return ReservationDefinition.newInstance - (arrival, arrival + (int)(defaultDuration * 1.1), defaultRequests, - reservationName); + return ReservationDefinition.newInstance(arrival, + arrival + (int) (defaultDuration * 1.1), defaultRequests, + reservationName, 0); } private ReservationListResponse listReservationById(String lister, diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java index cee9086..8e1fc9e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java @@ -1152,7 +1152,7 @@ private ReservationSubmissionRequest submitReservationTestHelper( } ReservationSubmissionRequest sRequest = ReservationSystemTestUtil.createSimpleReservationRequest(reservationID, - 4, arrival, deadline, duration); + 4, arrival, deadline, duration, 0); try { sResponse = clientService.submitReservation(sRequest); } catch (Exception e) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestReservationSystemWithRMHA.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestReservationSystemWithRMHA.java index 5a6fe67..d2befdb 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestReservationSystemWithRMHA.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestReservationSystemWithRMHA.java @@ -216,7 +216,7 @@ private ReservationSubmissionRequest createReservationSubmissionRequest( long duration = 60000; long deadline = (long) (arrival + duration + 1500); return ReservationSystemTestUtil.createSimpleReservationRequest( - reservationId, 4, arrival, deadline, duration); + reservationId, 4, arrival, deadline, duration, 0); } private void validateReservation(Plan plan, ReservationId resId, diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystemTestUtil.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystemTestUtil.java index 24c386a..059f55c 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystemTestUtil.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystemTestUtil.java @@ -198,7 +198,7 @@ public static ReservationDefinition createSimpleReservationDefinition( public static ReservationSubmissionRequest createSimpleReservationRequest( ReservationId reservationId, int numContainers, long arrival, - long deadline, long duration) { + long deadline, long duration, int priority) { // create a request with a single atomic ask ReservationRequest r = ReservationRequest.newInstance(Resource.newInstance(1024, 1), @@ -208,7 +208,7 @@ public static ReservationSubmissionRequest createSimpleReservationRequest( ReservationRequestInterpreter.R_ALL); ReservationDefinition rDef = ReservationDefinition.newInstance(arrival, deadline, reqs, - "testClientRMService#reservation"); + "testClientRMService#reservation", priority); ReservationSubmissionRequest request = ReservationSubmissionRequest.newInstance(rDef, reservationQ, reservationId); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/planning/TestAlignedPlanner.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/planning/TestAlignedPlanner.java index ec305a2..ca83b79 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/planning/TestAlignedPlanner.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/planning/TestAlignedPlanner.java @@ -801,7 +801,7 @@ private ReservationDefinition createReservationDefinition(long arrival, return ReservationDefinition.newInstance(arrival, deadline, ReservationRequests.newInstance(Arrays.asList(reservationRequests), - rType), username); + rType), username, 0); }