diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetClusterNodeLabelsResponse.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetClusterNodeLabelsResponse.java index cf6e683ff1..cb2ccfba3d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetClusterNodeLabelsResponse.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetClusterNodeLabelsResponse.java @@ -18,7 +18,9 @@ package org.apache.hadoop.yarn.api.protocolrecords; +import java.util.ArrayList; import java.util.List; +import java.util.Set; import org.apache.hadoop.classification.InterfaceAudience.Public; import org.apache.hadoop.classification.InterfaceStability.Evolving; @@ -28,18 +30,48 @@ @Public @Evolving public abstract class GetClusterNodeLabelsResponse { - public static GetClusterNodeLabelsResponse newInstance(List labels) { - GetClusterNodeLabelsResponse request = - Records.newRecord(GetClusterNodeLabelsResponse.class); - request.setNodeLabels(labels); - return request; + /** + * Creates a new instance. + * + * @param labels Node labels + * @return response + * @deprecated Use {@link #newInstance(List)} instead. + */ + @Deprecated + public static GetClusterNodeLabelsResponse newInstance(Set labels) { + List list = new ArrayList<>(); + for (String label : labels) { + list.add(NodeLabel.newInstance(label)); + } + return newInstance(list); } - @Public - @Evolving - public abstract void setNodeLabels(List labels); + public static GetClusterNodeLabelsResponse newInstance(List labels) { + GetClusterNodeLabelsResponse response = + Records.newRecord(GetClusterNodeLabelsResponse.class); + response.setNodeLabelList(labels); + return response; + } - @Public - @Evolving - public abstract List getNodeLabels(); + public abstract void setNodeLabelList(List labels); + + public abstract List getNodeLabelList(); + + /** + * Set node labels to the response. + * + * @param labels Node labels + * @deprecated Use {@link #setNodeLabelList(List)} instead. + */ + @Deprecated + public abstract void setNodeLabels(Set labels); + + /** + * Get node labels of the response. + * + * @return Node labels + * @deprecated Use {@link #getNodeLabelList()} instead. + */ + @Deprecated + public abstract Set getNodeLabels(); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java index a0f9678cc4..50f1b490ad 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java @@ -899,7 +899,7 @@ public Map> getLabelsToNodes(Set labels) @Override public List getClusterNodeLabels() throws YarnException, IOException { return rmClient.getClusterNodeLabels( - GetClusterNodeLabelsRequest.newInstance()).getNodeLabels(); + GetClusterNodeLabelsRequest.newInstance()).getNodeLabelList(); } @Override diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetClusterNodeLabelsResponsePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetClusterNodeLabelsResponsePBImpl.java index f569fb22a5..227abe963b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetClusterNodeLabelsResponsePBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetClusterNodeLabelsResponsePBImpl.java @@ -19,7 +19,9 @@ package org.apache.hadoop.yarn.api.protocolrecords.impl.pb; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse; import org.apache.hadoop.yarn.api.records.NodeLabel; @@ -46,7 +48,7 @@ public GetClusterNodeLabelsResponsePBImpl( viaProto = true; } - public GetClusterNodeLabelsResponseProto getProto() { + public synchronized GetClusterNodeLabelsResponseProto getProto() { mergeLocalToProto(); proto = viaProto ? proto : builder.build(); viaProto = true; @@ -101,14 +103,43 @@ private void maybeInitBuilder() { } @Override - public void setNodeLabels(List updatedNodeLabels) { + public synchronized void setNodeLabelList(List nodeLabels) { maybeInitBuilder(); this.updatedNodeLabels = new ArrayList<>(); - if (updatedNodeLabels == null) { + if (nodeLabels == null) { builder.clearNodeLabels(); return; } - this.updatedNodeLabels.addAll(updatedNodeLabels); + this.updatedNodeLabels.addAll(nodeLabels); + } + + /** + * @deprecated Use {@link #getNodeLabelList()} instead. + */ + @Override + @Deprecated + public synchronized Set getNodeLabels() { + Set set = new HashSet<>(); + List labelList = getNodeLabelList(); + if (labelList != null) { + for (NodeLabel label : labelList) { + set.add(label.getName()); + } + } + return set; + } + + /** + * @deprecated Use {@link #setNodeLabelList(List)} instead. + */ + @Override + @Deprecated + public void setNodeLabels(Set labels) { + List list = new ArrayList<>(); + for (String s : labels) { + list.add(NodeLabel.newInstance(s)); + } + setNodeLabelList(list); } private void initLocalNodeLabels() { @@ -121,7 +152,7 @@ private void initLocalNodeLabels() { } @Override - public List getNodeLabels() { + public synchronized List getNodeLabelList() { if (this.updatedNodeLabels != null) { return this.updatedNodeLabels; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/security/ContainerTokenIdentifier.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/security/ContainerTokenIdentifier.java index f8e94636e6..4b349986de 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/security/ContainerTokenIdentifier.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/security/ContainerTokenIdentifier.java @@ -73,6 +73,31 @@ public ContainerTokenIdentifier(ContainerId containerID, CommonNodeLabelsManager.NO_LABEL, ContainerType.TASK); } + /** + * Creates a instance. + * + * @param appSubmitter appSubmitter + * @param containerID container ID + * @param creationTime creation time + * @param expiryTimeStamp expiry timestamp + * @param hostName hostname + * @param logAggregationContext log aggregation context + * @param masterKeyId master key ID + * @param priority priority + * @param r resource needed by the container + * @param rmIdentifier ResourceManager identifier + * @deprecated Use one of the other constructors instead. + */ + @Deprecated + public ContainerTokenIdentifier(ContainerId containerID, String hostName, + String appSubmitter, Resource r, long expiryTimeStamp, int masterKeyId, + long rmIdentifier, Priority priority, long creationTime, + LogAggregationContext logAggregationContext) { + this(containerID, hostName, appSubmitter, r, expiryTimeStamp, masterKeyId, + rmIdentifier, priority, creationTime, logAggregationContext, + CommonNodeLabelsManager.NO_LABEL); + } + public ContainerTokenIdentifier(ContainerId containerID, String hostName, String appSubmitter, Resource r, long expiryTimeStamp, int masterKeyId, long rmIdentifier, Priority priority, long creationTime, diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/InvalidStateTransitionException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/InvalidStateTransitionException.java index d10902ab44..51eafc9f73 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/InvalidStateTransitionException.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/InvalidStateTransitionException.java @@ -20,7 +20,6 @@ import org.apache.hadoop.classification.InterfaceAudience.Public; import org.apache.hadoop.classification.InterfaceStability.Evolving; -import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; /** * The exception that happens when you call invalid state transition. @@ -28,24 +27,13 @@ */ @Public @Evolving -public class InvalidStateTransitionException extends YarnRuntimeException { +@SuppressWarnings("deprecation") +public class InvalidStateTransitionException extends + InvalidStateTransitonException { - private static final long serialVersionUID = -6188669113571351684L; - private Enum currentState; - private Enum event; + private static final long serialVersionUID = 8610511635996283691L; public InvalidStateTransitionException(Enum currentState, Enum event) { - super("Invalid event: " + event + " at " + currentState); - this.currentState = currentState; - this.event = event; + super(currentState, event); } - - public Enum getCurrentState() { - return currentState; - } - - public Enum getEvent() { - return event; - } - } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/InvalidStateTransitonException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/InvalidStateTransitonException.java index eeb1b977fd..82f46ccf19 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/InvalidStateTransitonException.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/InvalidStateTransitonException.java @@ -20,20 +20,31 @@ import org.apache.hadoop.classification.InterfaceAudience.Public; import org.apache.hadoop.classification.InterfaceStability.Evolving; +import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; /** @deprecated Use {@link InvalidStateTransitionException} instead. */ @Public @Evolving @Deprecated -public class InvalidStateTransitonException extends - InvalidStateTransitionException { +public class InvalidStateTransitonException extends YarnRuntimeException { - private static final long serialVersionUID = 8610511635996283691L; + private static final long serialVersionUID = -6188669113571351684L; + private Enum currentState; + private Enum event; public InvalidStateTransitonException(Enum currentState, Enum event) { - super(currentState, event); + super("Invalid event: " + event + " at " + currentState); + this.currentState = currentState; + this.event = event; } + public Enum getCurrentState() { + return currentState; + } + + public Enum getEvent() { + return event; + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java index f35efa0e1b..12cdcf134c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java @@ -1534,7 +1534,7 @@ protected ClientRMService createClientRMService() { // Get node labels collection GetClusterNodeLabelsResponse response = client .getClusterNodeLabels(GetClusterNodeLabelsRequest.newInstance()); - Assert.assertTrue(response.getNodeLabels().containsAll( + Assert.assertTrue(response.getNodeLabelList().containsAll( Arrays.asList(labelX, labelY))); // Get node labels mapping @@ -1605,7 +1605,7 @@ protected ClientRMService createClientRMService() { // Get node labels collection GetClusterNodeLabelsResponse response = client .getClusterNodeLabels(GetClusterNodeLabelsRequest.newInstance()); - Assert.assertTrue(response.getNodeLabels().containsAll( + Assert.assertTrue(response.getNodeLabelList().containsAll( Arrays.asList(labelX, labelY, labelZ))); // Get labels to nodes mapping