|
@@ -35,6 +35,7 @@ import org.apache.hadoop.yarn.api.records.NMToken;
|
|
|
import org.apache.hadoop.yarn.api.records.NodeReport;
|
|
|
import org.apache.hadoop.yarn.api.records.PreemptionMessage;
|
|
|
import org.apache.hadoop.yarn.api.records.Priority;
|
|
|
+import org.apache.hadoop.yarn.api.records.RejectedSchedulingRequest;
|
|
|
import org.apache.hadoop.yarn.api.records.Resource;
|
|
|
import org.apache.hadoop.yarn.api.records.Token;
|
|
|
import org.apache.hadoop.yarn.api.records.UpdateContainerError;
|
|
@@ -47,9 +48,11 @@ import org.apache.hadoop.yarn.api.records.impl.pb.NodeReportPBImpl;
|
|
|
import org.apache.hadoop.yarn.api.records.impl.pb.PreemptionMessagePBImpl;
|
|
|
import org.apache.hadoop.yarn.api.records.impl.pb.PriorityPBImpl;
|
|
|
import org.apache.hadoop.yarn.api.records.impl.pb.ProtoUtils;
|
|
|
+import org.apache.hadoop.yarn.api.records.impl.pb.RejectedSchedulingRequestPBImpl;
|
|
|
import org.apache.hadoop.yarn.api.records.impl.pb.ResourcePBImpl;
|
|
|
import org.apache.hadoop.yarn.api.records.impl.pb.TokenPBImpl;
|
|
|
import org.apache.hadoop.yarn.api.records.impl.pb.UpdatedContainerPBImpl;
|
|
|
+import org.apache.hadoop.yarn.proto.YarnProtos;
|
|
|
import org.apache.hadoop.yarn.proto.YarnProtos.CollectorInfoProto;
|
|
|
import org.apache.hadoop.yarn.proto.YarnProtos.ContainerProto;
|
|
|
import org.apache.hadoop.yarn.proto.YarnProtos.ContainerStatusProto;
|
|
@@ -81,6 +84,7 @@ public class AllocateResponsePBImpl extends AllocateResponse {
|
|
|
|
|
|
private List<NodeReport> updatedNodes = null;
|
|
|
private List<UpdateContainerError> updateErrors = null;
|
|
|
+ private List<RejectedSchedulingRequest> rejectedRequests = null;
|
|
|
private PreemptionMessage preempt;
|
|
|
private Token amrmToken = null;
|
|
|
private Priority appPriority = null;
|
|
@@ -140,6 +144,13 @@ public class AllocateResponsePBImpl extends AllocateResponse {
|
|
|
getContainerStatusProtoIterable(this.completedContainersStatuses);
|
|
|
builder.addAllCompletedContainerStatuses(iterable);
|
|
|
}
|
|
|
+ if (this.rejectedRequests != null) {
|
|
|
+ builder.clearRejectedSchedulingRequests();
|
|
|
+ Iterable<YarnProtos.RejectedSchedulingRequestProto> iterable =
|
|
|
+ getRejectedSchedulingRequestsProtoIterable(
|
|
|
+ this.rejectedRequests);
|
|
|
+ builder.addAllRejectedSchedulingRequests(iterable);
|
|
|
+ }
|
|
|
if (this.updatedNodes != null) {
|
|
|
builder.clearUpdatedNodes();
|
|
|
Iterable<NodeReportProto> iterable =
|
|
@@ -471,6 +482,24 @@ public class AllocateResponsePBImpl extends AllocateResponse {
|
|
|
containersFromPreviousAttempts.addAll(containers);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public synchronized List<RejectedSchedulingRequest>
|
|
|
+ getRejectedSchedulingRequests() {
|
|
|
+ initRejectedRequestsList();
|
|
|
+ return this.rejectedRequests;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public synchronized void setRejectedSchedulingRequests(
|
|
|
+ List<RejectedSchedulingRequest> rejectedReqs) {
|
|
|
+ if (rejectedReqs == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ initRejectedRequestsList();
|
|
|
+ this.rejectedRequests.clear();
|
|
|
+ this.rejectedRequests.addAll(rejectedReqs);
|
|
|
+ }
|
|
|
+
|
|
|
private synchronized void initLocalUpdatedContainerList() {
|
|
|
if (this.updatedContainers != null) {
|
|
|
return;
|
|
@@ -528,6 +557,20 @@ public class AllocateResponsePBImpl extends AllocateResponse {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private synchronized void initRejectedRequestsList() {
|
|
|
+ if (this.rejectedRequests != null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ AllocateResponseProtoOrBuilder p = viaProto ? proto : builder;
|
|
|
+ List<YarnProtos.RejectedSchedulingRequestProto> list =
|
|
|
+ p.getRejectedSchedulingRequestsList();
|
|
|
+ rejectedRequests = new ArrayList<>();
|
|
|
+
|
|
|
+ for (YarnProtos.RejectedSchedulingRequestProto c : list) {
|
|
|
+ rejectedRequests.add(convertFromProtoFormat(c));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private synchronized void initLocalNewNMTokenList() {
|
|
|
if (nmTokens != null) {
|
|
|
return;
|
|
@@ -712,6 +755,38 @@ public class AllocateResponsePBImpl extends AllocateResponse {
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
+
|
|
|
+ private synchronized Iterable<YarnProtos.RejectedSchedulingRequestProto>
|
|
|
+ getRejectedSchedulingRequestsProtoIterable(
|
|
|
+ final List<RejectedSchedulingRequest> rejectedReqsList) {
|
|
|
+ maybeInitBuilder();
|
|
|
+ return new Iterable<YarnProtos.RejectedSchedulingRequestProto>() {
|
|
|
+ @Override
|
|
|
+ public Iterator<YarnProtos.RejectedSchedulingRequestProto> iterator() {
|
|
|
+ return new Iterator<YarnProtos.RejectedSchedulingRequestProto>() {
|
|
|
+
|
|
|
+ private Iterator<RejectedSchedulingRequest> iter =
|
|
|
+ rejectedReqsList.iterator();
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public synchronized boolean hasNext() {
|
|
|
+ return iter.hasNext();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public synchronized YarnProtos.RejectedSchedulingRequestProto next() {
|
|
|
+ return convertToProtoFormat(iter.next());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public synchronized void remove() {
|
|
|
+ throw new UnsupportedOperationException();
|
|
|
+
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
|
|
|
private synchronized Iterable<NodeReportProto>
|
|
|
getNodeReportProtoIterable(
|
|
@@ -808,6 +883,16 @@ public class AllocateResponsePBImpl extends AllocateResponse {
|
|
|
return ((ContainerStatusPBImpl)t).getProto();
|
|
|
}
|
|
|
|
|
|
+ private synchronized RejectedSchedulingRequestPBImpl convertFromProtoFormat(
|
|
|
+ YarnProtos.RejectedSchedulingRequestProto p) {
|
|
|
+ return new RejectedSchedulingRequestPBImpl(p);
|
|
|
+ }
|
|
|
+
|
|
|
+ private synchronized YarnProtos.RejectedSchedulingRequestProto
|
|
|
+ convertToProtoFormat(RejectedSchedulingRequest t) {
|
|
|
+ return ((RejectedSchedulingRequestPBImpl)t).getProto();
|
|
|
+ }
|
|
|
+
|
|
|
private synchronized ResourcePBImpl convertFromProtoFormat(ResourceProto p) {
|
|
|
return new ResourcePBImpl(p);
|
|
|
}
|