Repository: incubator-myriad Updated Branches: refs/heads/master 577c30b1a -> 382eb7bc7
Used reserved resources firstly. Project: http://git-wip-us.apache.org/repos/asf/incubator-myriad/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-myriad/commit/382eb7bc Tree: http://git-wip-us.apache.org/repos/asf/incubator-myriad/tree/382eb7bc Diff: http://git-wip-us.apache.org/repos/asf/incubator-myriad/diff/382eb7bc Branch: refs/heads/master Commit: 382eb7bc77cec1ac7a13d027d8c28cfb1a379a6b Parents: 577c30b Author: Klaus Ma <klaus1982...@gmail.com> Authored: Fri Oct 7 21:49:58 2016 +0800 Committer: Klaus Ma <klaus1982...@gmail.com> Committed: Fri Oct 7 21:58:42 2016 +0800 ---------------------------------------------------------------------- .../handlers/ResourceOffersEventHandler.java | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/382eb7bc/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/ResourceOffersEventHandler.java ---------------------------------------------------------------------- diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/ResourceOffersEventHandler.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/ResourceOffersEventHandler.java index c65ad4a..04fd14c 100644 --- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/ResourceOffersEventHandler.java +++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/ResourceOffersEventHandler.java @@ -43,6 +43,8 @@ import org.apache.myriad.state.SchedulerState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.myriad.configuration.MyriadConfiguration.DEFAULT_ROLE; + /** * handles and logs resource offers events */ @@ -83,6 +85,31 @@ public class ResourceOffersEventHandler implements EventHandler<ResourceOffersEv } LOGGER.debug("Received offers {}", offers.size()); LOGGER.debug("Pending tasks: {}", this.schedulerState.getPendingTaskIds()); + + // Let Myriad use reserved resources firstly. + Collections.sort(offers, new Comparator<Offer>() { + boolean isReserved(Offer o) { + for (Protos.Resource resource : o.getResourcesList()) { + if (resource.hasRole() && !Objects.equals(resource.getRole(), DEFAULT_ROLE)) { + return true; + } + } + return false; + } + + @Override + public int compare(Offer o1, Offer o2) { + boolean reserved1 = isReserved(o1); + boolean reserved2 = isReserved(o2); + + if (reserved1 == reserved2) { + return 0; + } + + return reserved1 ? -1 : 1; + } + }); + driverOperationLock.lock(); try { for (Iterator<Offer> iterator = offers.iterator(); iterator.hasNext(); ) {