diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java index c198603..5e22619 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java @@ -39,6 +39,7 @@ import org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse; import org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterRequest; import org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterResponse; +import org.apache.hadoop.yarn.api.protocolrecords.PreemptionMessage; import org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterRequest; import org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterResponse; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; @@ -339,6 +340,15 @@ public AllocateResponse allocate(AllocateRequest request) } allocateResponse.setNumClusterNodes(this.rScheduler.getNumClusterNodes()); + + // If there is preemption to be added + if (allocation.getContainersToPreemptFromThisApp() != null) { + // setup ask-backs from RM to AM + PreemptionMessage preemptReq = + recordFactory.newRecordInstance(PreemptionMessage.class); + allocateResponse.setPreemptionMessage(preemptReq); + preemptReq.setContainers(allocation.getContainersToPreemptFromThisApp()); + } return allocateResponse; } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Allocation.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Allocation.java index cfef9be..0830f83 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Allocation.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Allocation.java @@ -19,17 +19,26 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler; import java.util.List; +import java.util.Set; import org.apache.hadoop.yarn.api.records.Container; +import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.hadoop.yarn.api.records.Resource; public class Allocation { final List containers; final Resource resourceLimit; - + final Set containerToRelease; + public Allocation(List containers, Resource resourceLimit) { + this(containers,resourceLimit, null); + } + + public Allocation(List containers, Resource resourceLimit, + Set containerToRelease) { this.containers = containers; this.resourceLimit = resourceLimit; + this.containerToRelease = containerToRelease; } public List getContainers() { @@ -39,5 +48,9 @@ public Allocation(List containers, Resource resourceLimit) { public Resource getResourceLimit() { return resourceLimit; } - + + public Set getContainersToPreemptFromThisApp() { + return containerToRelease; + } + }