diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java b/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 9aea62d..1105ab9 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java @@ -93,6 +93,7 @@ import org.apache.hadoop.yarn.api.records.FinalApplicationStatus; import org.apache.hadoop.yarn.api.records.LocalResource; import org.apache.hadoop.yarn.api.records.NodeId; +import org.apache.hadoop.yarn.api.records.NodeLabel; import org.apache.hadoop.yarn.api.records.NodeState; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.QueueACL; @@ -136,6 +137,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NewApplication; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsName; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo; @@ -790,13 +792,13 @@ public NodeToLabelsInfo getNodeToLabels(@Context HttpServletRequest hsr) init(); NodeToLabelsInfo ntl = new NodeToLabelsInfo(); - HashMap ntlMap = ntl.getNodeToLabels(); + HashMap ntlMap = ntl.getNodeToLabels(); Map> nodeIdToLabels = rm.getRMContext().getNodeLabelManager().getNodeLabels(); for (Map.Entry> nitle : nodeIdToLabels.entrySet()) { ntlMap.put(nitle.getKey().toString(), - new NodeLabelsInfo(nitle.getValue())); + new NodeLabelsName(nitle.getValue())); } return ntl; @@ -838,7 +840,7 @@ public Response replaceLabelsOnNodes(final NodeToLabelsInfo newNodeToLabels, Map> nodeIdToLabels = new HashMap>(); - for (Map.Entry nitle : newNodeToLabels + for (Map.Entry nitle : newNodeToLabels .getNodeToLabels().entrySet()) { nodeIdToLabels.put( ConverterUtils.toNodeIdWithDefaultPort(nitle.getKey()), @@ -851,7 +853,7 @@ public Response replaceLabelsOnNodes(final NodeToLabelsInfo newNodeToLabels, @POST @Path("/nodes/{nodeId}/replace-labels") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response replaceLabelsOnNode(NodeLabelsInfo newNodeLabelsInfo, + public Response replaceLabelsOnNode(NodeLabelsName newNodeLabelsInfo, @Context HttpServletRequest hsr, @PathParam("nodeId") String nodeId) throws Exception { NodeId nid = ConverterUtils.toNodeIdWithDefaultPort(nodeId); @@ -894,13 +896,17 @@ private Response replaceLabelsOnNode( @GET @Path("/get-node-labels") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public NodeLabelsInfo getClusterNodeLabels(@Context HttpServletRequest hsr) - throws IOException { + public List getClusterNodeLabels( + @Context HttpServletRequest hsr) throws IOException { init(); - NodeLabelsInfo ret = - new NodeLabelsInfo(rm.getRMContext().getNodeLabelManager() - .getClusterNodeLabelNames()); + List nodeLabels = rm.getRMContext().getNodeLabelManager() + .getClusterNodeLabels(); + + List ret = new ArrayList(); + for (NodeLabel label : nodeLabels) { + ret.add(new NodeLabelsInfo(label.getName(), label.isExclusive())); + } return ret; } @@ -908,27 +914,32 @@ public NodeLabelsInfo getClusterNodeLabels(@Context HttpServletRequest hsr) @POST @Path("/add-node-labels") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response addToClusterNodeLabels(final NodeLabelsInfo newNodeLabels, + public Response addToClusterNodeLabels(final Set newNodeLabels, @Context HttpServletRequest hsr) throws Exception { init(); - + UserGroupInformation callerUGI = getCallerUserGroupInformation(hsr, true); if (callerUGI == null) { String msg = "Unable to obtain user name, user not authenticated for" - + " post to .../add-node-labels"; + + " post to .../add-node-labels"; throw new AuthorizationException(msg); } if (!rm.getRMContext().getNodeLabelManager().checkAccess(callerUGI)) { String msg = "User " + callerUGI.getShortUserName() + " not authorized" - + " for post to .../add-node-labels "; + + " for post to .../add-node-labels "; throw new AuthorizationException(msg); } - - rm.getRMContext().getNodeLabelManager() - .addToCluserNodeLabelsWithDefaultExclusivity(new HashSet( - newNodeLabels.getNodeLabels())); - + + Set nodeLabels = new HashSet(); + for (NodeLabelsInfo label : newNodeLabels) { + nodeLabels.add(NodeLabel.newInstance(label.getNodeLabelName(), + label.getNodeLabelExclusity())); + } + rm.getRMContext() + .getNodeLabelManager() + .addToCluserNodeLabels(nodeLabels); + return Response.status(Status.OK).build(); } @@ -936,7 +947,7 @@ public Response addToClusterNodeLabels(final NodeLabelsInfo newNodeLabels, @POST @Path("/remove-node-labels") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response removeFromCluserNodeLabels(final NodeLabelsInfo oldNodeLabels, + public Response removeFromCluserNodeLabels(final NodeLabelsName oldNodeLabels, @Context HttpServletRequest hsr) throws Exception { init(); @@ -964,13 +975,13 @@ public Response removeFromCluserNodeLabels(final NodeLabelsInfo oldNodeLabels, @GET @Path("/nodes/{nodeId}/get-labels") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public NodeLabelsInfo getLabelsOnNode(@Context HttpServletRequest hsr, + public NodeLabelsName getLabelsOnNode(@Context HttpServletRequest hsr, @PathParam("nodeId") String nodeId) throws IOException { init(); NodeId nid = ConverterUtils.toNodeIdWithDefaultPort(nodeId); - return new NodeLabelsInfo( + return new NodeLabelsName( rm.getRMContext().getNodeLabelManager().getLabelsOnNode(nid)); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java index 1cb895a..fb2ddda 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java @@ -18,8 +18,6 @@ package org.apache.hadoop.yarn.server.resourcemanager.webapp.dao; -import java.util.*; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; @@ -28,25 +26,32 @@ @XmlAccessorType(XmlAccessType.FIELD) public class NodeLabelsInfo { - protected ArrayList nodeLabels = new ArrayList(); + protected String nodeLabelName = new String(); + protected boolean nodeLabelExclusity; + + public NodeLabelsInfo(String name) { + this.nodeLabelName = name; + this.nodeLabelExclusity = true; + } + + public NodeLabelsInfo(String name, boolean exclusity) { + this.nodeLabelName = name; + this.nodeLabelExclusity = exclusity; + } - public NodeLabelsInfo() { - } // JAXB needs this - - public NodeLabelsInfo(ArrayList nodeLabels) { - this.nodeLabels = nodeLabels; + public String getNodeLabelName() { + return nodeLabelName; } - - public NodeLabelsInfo(Set nodeLabelsSet) { - this.nodeLabels = new ArrayList(nodeLabelsSet); + + public void setNodeLabelName(String name) { + this.nodeLabelName = name; } - - public ArrayList getNodeLabels() { - return nodeLabels; + + public boolean getNodeLabelExclusity() { + return nodeLabelExclusity; } - - public void setNodeLabels(ArrayList nodeLabels) { - this.nodeLabels = nodeLabels; + + public void setNodeLabelExclusity(boolean exclusity) { + this.nodeLabelExclusity = exclusity; } - } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsName.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsName.java new file mode 100644 index 0000000..760e2f4 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsName.java @@ -0,0 +1,52 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.server.resourcemanager.webapp.dao; + +import java.util.*; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "nodeLabelsName") +@XmlAccessorType(XmlAccessType.FIELD) +public class NodeLabelsName { + + protected ArrayList nodeLabels = new ArrayList(); + + public NodeLabelsName() { + } // JAXB needs this + + public NodeLabelsName(ArrayList nodeLabels) { + this.nodeLabels = nodeLabels; + } + + public NodeLabelsName(Set nodeLabelsSet) { + this.nodeLabels = new ArrayList(nodeLabelsSet); + } + + public ArrayList getNodeLabels() { + return nodeLabels; + } + + public void setNodeLabels(ArrayList nodeLabels) { + this.nodeLabels = nodeLabels; + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeToLabelsInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeToLabelsInfo.java index f2e6441..00e3777 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeToLabelsInfo.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeToLabelsInfo.java @@ -28,13 +28,13 @@ @XmlAccessorType(XmlAccessType.FIELD) public class NodeToLabelsInfo { - protected HashMap nodeToLabels = - new HashMap(); + protected HashMap nodeToLabels = + new HashMap(); public NodeToLabelsInfo() { } // JAXB needs this - public HashMap getNodeToLabels() { + public HashMap getNodeToLabels() { return nodeToLabels; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java index 2d5518d..2ffdcea 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java @@ -34,7 +34,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.MockRM; import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LabelsToNodesInfo; -import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsName; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsInfo; import org.apache.hadoop.yarn.webapp.GenericExceptionHandler; import org.apache.hadoop.yarn.webapp.JerseyTestBase; @@ -250,7 +250,7 @@ public void testNodeLabels() throws JSONException, Exception { // Replace labels using node-to-labels NodeToLabelsInfo ntli = new NodeToLabelsInfo(); - NodeLabelsInfo nli = new NodeLabelsInfo(); + NodeLabelsName nli = new NodeLabelsName(); nli.getNodeLabels().add("a"); ntli.getNodeToLabels().put("nid:0", nli); response = @@ -414,7 +414,7 @@ public void testNodeLabels() throws JSONException, Exception { // Case1 : Replace labels using node-to-labels ntli = new NodeToLabelsInfo(); - nli = new NodeLabelsInfo(); + nli = new NodeLabelsName(); nli.getNodeLabels().add("x"); ntli.getNodeToLabels().put("nid:0", nli); response = -- 1.9.4.msysgit.1