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 10f592a..99355e2 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 @@ -37,13 +37,14 @@ @Public @Unstable public static ReservationDefinition newInstance(long arrival, long deadline, - ReservationRequests reservationRequests, String name) { + ReservationRequests reservationRequests, String name, int priority) { ReservationDefinition rDefinition = Records.newRecord(ReservationDefinition.class); rDefinition.setArrival(arrival); rDefinition.setDeadline(deadline); rDefinition.setReservationRequests(reservationRequests); rDefinition.setReservationName(name); + rDefinition.setPriority(priority); return rDefinition; } @@ -134,4 +135,24 @@ public abstract void setReservationRequests( @Evolving public abstract void setReservationName(String name); + /** + * 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 6c337cf..a75377b 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 @@ -477,6 +477,7 @@ message ReservationDefinitionProto { optional int64 arrival = 2; optional int64 deadline = 3; optional string reservation_name = 4; + optional int32 priority = 5; } 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 360ff99..d1ffe4d 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 @@ -1235,10 +1235,11 @@ private YarnClient setupYarnClient(MiniYARNCluster cluster) { } private ReservationSubmissionRequest submitReservationTestHelper( - YarnClient client, long arrival, long deadline, long duration) { + YarnClient client, long arrival, long deadline, long duration, + int priority) { ReservationId reservationID = getNewReservation(client).getReservationId(); ReservationSubmissionRequest sRequest = createSimpleReservationRequest( - reservationID, 4, arrival, deadline, duration); + reservationID, 4, arrival, deadline, duration, priority); ReservationSubmissionResponse sResponse = null; try { sResponse = client.submitReservation(sRequest); @@ -1262,7 +1263,7 @@ public void testCreateReservation() { 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. @@ -1305,7 +1306,7 @@ public void testUpdateReservation() { 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 = @@ -1347,7 +1348,7 @@ public void testListReservationsByReservationId() { 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(); ReservationListResponse response = null; @@ -1384,7 +1385,7 @@ public void testListReservationsByTimeInterval() { 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. @@ -1449,7 +1450,7 @@ public void testListReservationsByInvalidTimeInterval() { 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 @@ -1499,7 +1500,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( @@ -1589,7 +1590,7 @@ public void testReservationDelete() { 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 @@ -1628,7 +1629,7 @@ public void testReservationDelete() { 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), @@ -1638,7 +1639,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 cbe7ccd..704efd8 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 75bffc7..eaeed9a 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 @@ -2017,7 +2017,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()); @@ -2130,7 +2131,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 aa5acc6..2c8c089 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 @@ -390,7 +390,7 @@ private ReservationDefinition makeSimpleReservationDefinition() { String reservationName = UUID.randomUUID().toString(); return ReservationDefinition.newInstance (arrival, arrival + (int)(defaultDuration * 1.1), defaultRequests, - reservationName); + 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 2a7971e..4888a58 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 @@ -1147,7 +1147,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); }