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/FairSchedulerAppsBlock.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerAppsBlock.java index 14ad277f73b..2700443ee70 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerAppsBlock.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerAppsBlock.java @@ -63,7 +63,7 @@ public FairSchedulerAppsBlock(ResourceManager rm, ViewContext ctx, Configuration conf) { super(ctx); FairScheduler scheduler = (FairScheduler) rm.getResourceScheduler(); - fsinfo = new FairSchedulerInfo(scheduler); + fsinfo = new FairSchedulerInfo(scheduler, null); apps = new ConcurrentHashMap(); for (Map.Entry entry : rm.getRMContext().getRMApps() .entrySet()) { 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/FairSchedulerPage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerPage.java index 7f31defa066..45492a470a8 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerPage.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerPage.java @@ -197,7 +197,7 @@ public void render(Block html) { span().$style(Q_END).__("100% ").__(). span(".q", "default").__().__(); } else { - FairSchedulerInfo sinfo = new FairSchedulerInfo(fs); + FairSchedulerInfo sinfo = new FairSchedulerInfo(fs, null); fsqinfo.qinfo = sinfo.getRootQueueInfo(); float used = fsqinfo.qinfo.getUsedMemoryFraction(); 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/RMWSConsts.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWSConsts.java index 87afc8070f2..1d5a5becdfa 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWSConsts.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWSConsts.java @@ -51,6 +51,9 @@ /** Path for {@code RMWebServiceProtocol#dumpSchedulerLogs}. */ public static final String SCHEDULER_LOGS = "/scheduler/logs"; + /** Path for {@code RMWebServiceProtocol#getSchedulerQueueInfo}. */ + public static final String SCHEDULER_QUEUE = "/scheduler/queue={queue}"; + /** Path for {@code RMWebServiceProtocol#getNodes}. */ public static final String NODES = "/nodes"; 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/RMWebServiceProtocol.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServiceProtocol.java index 3ba7a4ec0d6..4b77fd1d324 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServiceProtocol.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServiceProtocol.java @@ -129,6 +129,15 @@ String dumpSchedulerLogs(String time, HttpServletRequest hsr) throws IOException; + /** + * This method dumps the information for a scheduler queue + * reachable by using {@link RMWSConsts#SCHEDULER_QUEUE}. + * + * @param queue the queueName. It is a PathParam + * @return the scheduler queue info + */ + SchedulerTypeInfo getSchedulerQueueInfo(String queue); + /** * This method retrieves all the nodes information in the cluster, and it is * reachable by using {@link RMWSConsts#NODES}. 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 e4c81dbaccf..af3f70da789 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 @@ -144,6 +144,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerNode; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ActivitiesInfo; @@ -379,7 +380,7 @@ public SchedulerTypeInfo getSchedulerInfo() { sinfo = new CapacitySchedulerInfo(root, cs); } else if (rs instanceof FairScheduler) { FairScheduler fs = (FairScheduler) rs; - sinfo = new FairSchedulerInfo(fs); + sinfo = new FairSchedulerInfo(fs, null); } else if (rs instanceof FifoScheduler) { sinfo = new FifoSchedulerInfo(this.rm); } else { @@ -417,6 +418,44 @@ public String dumpSchedulerLogs(@FormParam(RMWSConsts.TIME) String time, return "Capacity scheduler logs are being created."; } + @GET + @Path(RMWSConsts.SCHEDULER_QUEUE) + @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, + MediaType.APPLICATION_XML + "; " + JettyUtils.UTF_8 }) + @Override + public SchedulerTypeInfo getSchedulerQueueInfo(@PathParam(RMWSConsts.QUEUE) String queue) { + initForReadableEndpoints(); + + if (queue == null || queue.isEmpty()) { + throw new NotFoundException("queueName, " + queue + ", is empty or null"); + } + + ResourceScheduler rs = rm.getResourceScheduler(); + SchedulerInfo sinfo; + if (rs instanceof CapacityScheduler) { + CapacityScheduler cs = (CapacityScheduler) rs; + CSQueue csQueue = cs.getQueue(queue); + if (csQueue != null) { + sinfo = new CapacitySchedulerInfo(csQueue, cs); + } else { + sinfo = null; + } + } else if (rs instanceof FairScheduler) { + FairScheduler fs = (FairScheduler) rs; + FSQueue fsQueue = fs.getQueueManager().getQueue(queue); + if (fsQueue != null) { + sinfo = new FairSchedulerInfo(fs, queue); + } else { + sinfo = null; + } + } else if (rs instanceof FifoScheduler) { + sinfo = new FifoSchedulerInfo(this.rm); + } else { + throw new NotFoundException("Unknown scheduler configured"); + } + return new SchedulerTypeInfo(sinfo); + } + @GET @Path(RMWSConsts.NODES) @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, 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/CapacitySchedulerInfo.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/CapacitySchedulerInfo.java index ca420419c89..a18ebe9902b 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/CapacitySchedulerInfo.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/CapacitySchedulerInfo.java @@ -50,18 +50,18 @@ public CapacitySchedulerInfo() { } // JAXB needs this - public CapacitySchedulerInfo(CSQueue parent, CapacityScheduler cs) { - this.queueName = parent.getQueueName(); - this.usedCapacity = parent.getUsedCapacity() * 100; - this.capacity = parent.getCapacity() * 100; - float max = parent.getMaximumCapacity(); + public CapacitySchedulerInfo(CSQueue queue, CapacityScheduler cs) { + this.queueName = queue.getQueueName(); + this.usedCapacity = queue.getUsedCapacity() * 100; + this.capacity = queue.getCapacity() * 100; + float max = queue.getMaximumCapacity(); if (max < EPSILON || max > 1f) max = 1f; this.maxCapacity = max * 100; - capacities = new QueueCapacitiesInfo(parent.getQueueCapacities(), - parent.getQueueResourceQuotas(), false); - queues = getQueues(parent); + capacities = new QueueCapacitiesInfo(queue.getQueueCapacities(), + queue.getQueueResourceQuotas(), false); + queues = getQueues(queue); health = new CapacitySchedulerHealthInfo(cs); } @@ -96,28 +96,31 @@ protected CapacitySchedulerQueueInfoList getQueues(CSQueue parent) { // for JSON changes from string to array depending on order of printing // Issue gets fixed if all the leaf queues are marshalled before the // non-leaf queues. See YARN-4785 for more details. - List childQueues = new ArrayList<>(); - List childLeafQueues = new ArrayList<>(); - List childNonLeafQueues = new ArrayList<>(); - for (CSQueue queue : parent.getChildQueues()) { - if (queue instanceof LeafQueue) { - childLeafQueues.add(queue); - } else { - childNonLeafQueues.add(queue); + List childQueuesOfParent = parent.getChildQueues(); + if (childQueuesOfParent != null) { + List childQueues = new ArrayList<>(); + List childLeafQueues = new ArrayList<>(); + List childNonLeafQueues = new ArrayList<>(); + for (CSQueue queue : parent.getChildQueues()) { + if (queue instanceof LeafQueue) { + childLeafQueues.add(queue); + } else { + childNonLeafQueues.add(queue); + } } - } - childQueues.addAll(childLeafQueues); - childQueues.addAll(childNonLeafQueues); - - for (CSQueue queue : childQueues) { - CapacitySchedulerQueueInfo info; - if (queue instanceof LeafQueue) { - info = new CapacitySchedulerLeafQueueInfo((LeafQueue) queue); - } else { - info = new CapacitySchedulerQueueInfo(queue); - info.queues = getQueues(queue); + childQueues.addAll(childLeafQueues); + childQueues.addAll(childNonLeafQueues); + + for (CSQueue queue : childQueues) { + CapacitySchedulerQueueInfo info; + if (queue instanceof LeafQueue) { + info = new CapacitySchedulerLeafQueueInfo((LeafQueue) queue); + } else { + info = new CapacitySchedulerQueueInfo(queue); + info.queues = getQueues(queue); + } + queuesInfo.addToQueueInfoList(info); } - queuesInfo.addToQueueInfoList(info); } return queuesInfo; } 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/FairSchedulerInfo.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/FairSchedulerInfo.java index 5355d4b9ef2..f7eb2cb8bec 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/FairSchedulerInfo.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/FairSchedulerInfo.java @@ -41,10 +41,15 @@ public FairSchedulerInfo() { } // JAXB needs this - public FairSchedulerInfo(FairScheduler fs) { + public FairSchedulerInfo(FairScheduler fs, String queueName) { scheduler = fs; - rootQueue = new FairSchedulerQueueInfo(scheduler.getQueueManager(). - getRootQueue(), scheduler); + if (queueName == null) { + rootQueue = new FairSchedulerQueueInfo(scheduler.getQueueManager(). + getRootQueue(), scheduler); + } else { + rootQueue = new FairSchedulerQueueInfo(scheduler.getQueueManager(). + getQueue(queueName), scheduler); + } } /** 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/FairSchedulerQueueInfo.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/FairSchedulerQueueInfo.java index 70c5fd04882..db9b8a808ea 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/FairSchedulerQueueInfo.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/FairSchedulerQueueInfo.java @@ -138,7 +138,7 @@ protected FairSchedulerQueueInfoList getChildQueues(FSQueue queue, // REST API if it is empty. We omit the field to keep the consistency // with CapacitySchedulerQueueInfo, which omits 'queues' field if empty. Collection children = queue.getChildQueues(); - if (children.isEmpty()) { + if (children == null || children.isEmpty()) { return null; } FairSchedulerQueueInfoList list = new FairSchedulerQueueInfoList(); 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/TestRMWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java index cb8056624ab..fe9b1a02328 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java @@ -565,6 +565,17 @@ public void testClusterSchedulerFifoXML() throws JSONException, Exception { verifySchedulerFifoXML(xml); } + @Test + public void testClusterSchedulerFifoQueueJSON() throws JSONException, Exception { + WebResource r = resource(); + ClientResponse response = r.path("ws").path("v1").path("cluster") + .path("scheduler").path("queue=test").get(ClientResponse.class); + assertEquals(MediaType.APPLICATION_JSON_TYPE + "; " + JettyUtils.UTF_8, + response.getType().toString()); + JSONObject json = response.getEntity(JSONObject.class); + verifyClusterSchedulerFifo(json); + } + public void verifySchedulerFifoXML(String xml) throws JSONException, Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/DefaultRequestInterceptorREST.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/DefaultRequestInterceptorREST.java index 34eaa6afa02..3cd402a91ff 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/DefaultRequestInterceptorREST.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/DefaultRequestInterceptorREST.java @@ -136,6 +136,13 @@ public String dumpSchedulerLogs(String time, HttpServletRequest hsr) RMWSConsts.RM_WEB_SERVICE_PATH + RMWSConsts.SCHEDULER_LOGS, null, null); } + @Override + public SchedulerTypeInfo getSchedulerQueueInfo(String queue) { + return RouterWebServiceUtil.genericForward(webAppAddress, null, + SchedulerTypeInfo.class, HTTPMethods.GET, + RMWSConsts.RM_WEB_SERVICE_PATH + RMWSConsts.SCHEDULER_QUEUE, null, null); + } + @Override public NodesInfo getNodes(String states) { // states will be part of additionalParam diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java index cfabc5c9687..580b62445c9 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java @@ -1137,6 +1137,11 @@ public String dumpSchedulerLogs(String time, HttpServletRequest hsr) throw new NotImplementedException("Code is not implemented"); } + @Override + public SchedulerTypeInfo getSchedulerQueueInfo(String queue) { + throw new NotImplementedException("Code is not implemented"); + } + @Override public ActivitiesInfo getActivities(HttpServletRequest hsr, String nodeId) { throw new NotImplementedException("Code is not implemented"); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/RouterWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/RouterWebServices.java index 94c709f35be..9b5bcad9927 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/RouterWebServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/RouterWebServices.java @@ -375,6 +375,17 @@ public String dumpSchedulerLogs(@FormParam(RMWSConsts.TIME) String time, return pipeline.getRootInterceptor().dumpSchedulerLogs(time, hsr); } + @GET + @Path(RMWSConsts.SCHEDULER_QUEUE) + @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, + MediaType.APPLICATION_XML + "; " + JettyUtils.UTF_8 }) + @Override + public SchedulerTypeInfo getSchedulerQueueInfo(@PathParam(RMWSConsts.QUEUE) String queue) { + init(); + RequestInterceptorChainWrapper pipeline = getInterceptorChain(null); + return pipeline.getRootInterceptor().getSchedulerQueueInfo(queue); + } + @GET @Path(RMWSConsts.NODES) @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockRESTRequestInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockRESTRequestInterceptor.java index db5c97b53cb..95e685d55e7 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockRESTRequestInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockRESTRequestInterceptor.java @@ -106,6 +106,11 @@ public String dumpSchedulerLogs(String time, HttpServletRequest hsr) return "Done"; } + @Override + public SchedulerTypeInfo getSchedulerQueueInfo(String queue) { + return new SchedulerTypeInfo(); + } + @Override public NodesInfo getNodes(String states) { return new NodesInfo(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/PassThroughRESTRequestInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/PassThroughRESTRequestInterceptor.java index 5d64fd78a89..77feea12708 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/PassThroughRESTRequestInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/PassThroughRESTRequestInterceptor.java @@ -131,6 +131,11 @@ public String dumpSchedulerLogs(String time, HttpServletRequest hsr) return getNextInterceptor().dumpSchedulerLogs(time, hsr); } + @Override + public SchedulerTypeInfo getSchedulerQueueInfo(String queue) { + return getNextInterceptor().getSchedulerQueueInfo(queue); + } + @Override public NodesInfo getNodes(String states) { return getNextInterceptor().getNodes(states); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestRouterWebServicesREST.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestRouterWebServicesREST.java index b66df4cbd7d..499714d6eef 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestRouterWebServicesREST.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestRouterWebServicesREST.java @@ -60,6 +60,7 @@ import static org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWSConsts.SCHEDULER_ACTIVITIES; import static org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWSConsts.SCHEDULER_APP_ACTIVITIES; import static org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWSConsts.SCHEDULER_LOGS; +import static org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWSConsts.SCHEDULER_QUEUE; import static org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWSConsts.STATES; import static org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWSConsts.TIME; import static org.apache.hadoop.yarn.server.router.webapp.HTTPMethods.POST; @@ -600,6 +601,27 @@ public void testDumpSchedulerLogsXML() throws Exception { assertNotNull(ci); } + /** + * This test validates the correctness of + * {@link RMWebServiceProtocol#getSchedulerQueueInfo(String)} ()} inside Router. + */ + @Test(timeout = 2000) + public void testGetSchedulerQueueInfoXML() throws Exception { + List responses = performGetCalls( + RM_WEB_SERVICE_PATH + format(SCHEDULER_QUEUE, "test"), SchedulerTypeInfo.class, + null, null); + + SchedulerTypeInfo routerResponse = responses.get(0); + SchedulerTypeInfo rmResponse = responses.get(1); + + assertNotNull(routerResponse); + assertNotNull(rmResponse); + + assertEquals( + rmResponse.getSchedulerInfo(), + routerResponse.getSchedulerInfo()); + } + /** * This test validates the correctness of * {@link RMWebServiceProtocol#createNewApplication()} inside Router.