YARN-4417. Make RM and Timeline-server REST APIs more consistent. Contributed by Wangda Tan
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/d0a22bae Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/d0a22bae Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/d0a22bae Branch: refs/heads/yarn-2877 Commit: d0a22bae9bd2c701c9d80896934fe07388cf5ae0 Parents: 32b3dc1 Author: Jian He <jia...@apache.org> Authored: Mon Dec 28 15:52:45 2015 -0800 Committer: Jian He <jia...@apache.org> Committed: Mon Dec 28 15:52:45 2015 -0800 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 + .../resourcemanager/webapp/RMWebServices.java | 80 ++++++++++---------- .../webapp/dao/AppAttemptInfo.java | 8 ++ .../webapp/TestRMWebServicesApps.java | 2 +- 4 files changed, 54 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/d0a22bae/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index e380893..b09823a 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -76,6 +76,9 @@ Release 2.9.0 - UNRELEASED YARN-4341. add doc about timeline performance tool usage (Chang Li via sjlee) + YARN-4417. Make RM and Timeline-server REST APIs more consistent. + (wtan via jianhe) + OPTIMIZATIONS BUG FIXES http://git-wip-us.apache.org/repos/asf/hadoop/blob/d0a22bae/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java ---------------------------------------------------------------------- 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 b744765..e107537 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 @@ -169,6 +169,9 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInf import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.StatisticsItemInfo; import org.apache.hadoop.yarn.server.security.ApplicationACLsManager; import org.apache.hadoop.yarn.server.utils.BuilderUtils; +import org.apache.hadoop.yarn.server.webapp.WebServices; +import org.apache.hadoop.yarn.server.webapp.dao.ContainerInfo; +import org.apache.hadoop.yarn.server.webapp.dao.ContainersInfo; import org.apache.hadoop.yarn.util.AdHocLogDumper; import org.apache.hadoop.yarn.util.ConverterUtils; import org.apache.hadoop.yarn.webapp.BadRequestException; @@ -182,7 +185,7 @@ import com.google.inject.Singleton; @Singleton @Path("/ws/v1/cluster") -public class RMWebServices { +public class RMWebServices extends WebServices { private static final Log LOG = LogFactory.getLog(RMWebServices.class.getName()); private static final String EMPTY = ""; @@ -201,6 +204,7 @@ public class RMWebServices { @Inject public RMWebServices(final ResourceManager rm, Configuration conf) { + super(rm.getClientRMService()); this.rm = rm; this.conf = conf; isCentralizedNodeLabelConfiguration = @@ -335,8 +339,8 @@ public class RMWebServices { } } - Collection<RMNode> rmNodes = RMServerUtils.queryRMNodes(this.rm.getRMContext(), - acceptedStates); + Collection<RMNode> rmNodes = RMServerUtils.queryRMNodes( + this.rm.getRMContext(), acceptedStates); NodesInfo nodesInfo = new NodesInfo(); for (RMNode rmNode : rmNodes) { NodeInfo nodeInfo = new NodeInfo(rmNode, sched); @@ -617,39 +621,6 @@ public class RMWebServices { return appStatInfo; } - private static Set<String> parseQueries( - Set<String> queries, boolean isState) { - Set<String> params = new HashSet<String>(); - if (!queries.isEmpty()) { - for (String query : queries) { - if (query != null && !query.trim().isEmpty()) { - String[] paramStrs = query.split(","); - for (String paramStr : paramStrs) { - if (paramStr != null && !paramStr.trim().isEmpty()) { - if (isState) { - try { - // enum string is in the uppercase - YarnApplicationState.valueOf( - StringUtils.toUpperCase(paramStr.trim())); - } catch (RuntimeException e) { - YarnApplicationState[] stateArray = - YarnApplicationState.values(); - String allAppStates = Arrays.toString(stateArray); - throw new BadRequestException( - "Invalid application-state " + paramStr.trim() - + " specified. It should be one of " + allAppStates); - } - } - params.add( - StringUtils.toLowerCase(paramStr.trim())); - } - } - } - } - } - return params; - } - private static Map<YarnApplicationState, Map<String, Long>> buildScoreboard( Set<String> states, Set<String> types) { Map<YarnApplicationState, Map<String, Long>> scoreboard @@ -729,6 +700,40 @@ public class RMWebServices { } @GET + @Path("/apps/{appid}/appattempts/{appattemptid}") + @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Override + public org.apache.hadoop.yarn.server.webapp.dao.AppAttemptInfo getAppAttempt(@Context HttpServletRequest req, + @Context HttpServletResponse res, @PathParam("appid") String appId, + @PathParam("appattemptid") String appAttemptId) { + init(res); + return super.getAppAttempt(req, res, appId, appAttemptId); + } + + @GET + @Path("/apps/{appid}/appattempts/{appattemptid}/containers") + @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Override + public ContainersInfo getContainers(@Context HttpServletRequest req, + @Context HttpServletResponse res, @PathParam("appid") String appId, + @PathParam("appattemptid") String appAttemptId) { + init(res); + return super.getContainers(req, res, appId, appAttemptId); + } + + @GET + @Path("/apps/{appid}/appattempts/{appattemptid}/containers/{containerid}") + @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Override + public ContainerInfo getContainer(@Context HttpServletRequest req, + @Context HttpServletResponse res, @PathParam("appid") String appId, + @PathParam("appattemptid") String appAttemptId, + @PathParam("containerid") String containerId) { + init(res); + return super.getContainer(req, res, appId, appAttemptId, containerId); + } + + @GET @Path("/apps/{appid}/state") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public AppState getAppState(@Context HttpServletRequest hsr, @@ -885,8 +890,7 @@ public class RMWebServices { NodeId nid = ConverterUtils.toNodeIdWithDefaultPort(nodeId); Map<NodeId, Set<String>> newLabelsForNode = new HashMap<NodeId, Set<String>>(); - newLabelsForNode.put(nid, - new HashSet<String>(newNodeLabelsName)); + newLabelsForNode.put(nid, new HashSet<String>(newNodeLabelsName)); return replaceLabelsOnNode(newLabelsForNode, hsr, "/nodes/nodeid/replace-labels"); http://git-wip-us.apache.org/repos/asf/hadoop/blob/d0a22bae/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppAttemptInfo.java ---------------------------------------------------------------------- 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/AppAttemptInfo.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/AppAttemptInfo.java index b6e95a6..f465258 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/AppAttemptInfo.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/AppAttemptInfo.java @@ -36,11 +36,13 @@ public class AppAttemptInfo { protected int id; protected long startTime; + protected long finishedTime; protected String containerId; protected String nodeHttpAddress; protected String nodeId; protected String logsLink; protected String blacklistedNodes; + protected String appAttemptId; public AppAttemptInfo() { } @@ -56,6 +58,7 @@ public class AppAttemptInfo { if (attempt != null) { this.id = attempt.getAppAttemptId().getAttemptId(); this.startTime = attempt.getStartTime(); + this.finishedTime = attempt.getFinishTime(); Container masterContainer = attempt.getMasterContainer(); if (masterContainer != null) { this.containerId = masterContainer.getId().toString(); @@ -75,6 +78,7 @@ public class AppAttemptInfo { } } } + this.appAttemptId = attempt.getAppAttemptId().toString(); } } @@ -86,6 +90,10 @@ public class AppAttemptInfo { return this.startTime; } + public long getFinishedTime() { + return this.finishedTime; + } + public String getNodeHttpAddress() { return this.nodeHttpAddress; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/d0a22bae/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java ---------------------------------------------------------------------- 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/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java index d0a8c27..05f141f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java @@ -1643,7 +1643,7 @@ public class TestRMWebServicesApps extends JerseyTestBase { String user) throws JSONException, Exception { - assertEquals("incorrect number of elements", 7, info.length()); + assertEquals("incorrect number of elements", 9, info.length()); verifyAppAttemptInfoGeneric(appAttempt, info.getInt("id"), info.getLong("startTime"), info.getString("containerId"),