From 441ebbc208cad3a386649c2c139590049f22a66f Mon Sep 17 00:00:00 2001 From: Prabhu Joseph Date: Tue, 16 Jun 2020 21:52:32 +0530 Subject: [PATCH] YARN-10319. Record Last N Scheduler Activities from ActivitiesManager --- .../scheduler/activities/ActivitiesManager.java | 41 +++++++++++++-- .../server/resourcemanager/webapp/RMWSConsts.java | 5 ++ .../webapp/RMWebServiceProtocol.java | 14 +++++ .../resourcemanager/webapp/RMWebServices.java | 48 +++++++++++++++++ .../webapp/dao/SchedulerActivitiesInfo.java | 60 ++++++++++++++++++++++ .../webapp/DefaultRequestInterceptorREST.java | 10 ++++ .../router/webapp/FederationInterceptorREST.java | 7 +++ .../server/router/webapp/RouterWebServices.java | 18 +++++++ .../router/webapp/BaseRouterWebServicesTest.java | 7 +++ .../router/webapp/MockRESTRequestInterceptor.java | 7 +++ .../webapp/PassThroughRESTRequestInterceptor.java | 7 +++ 11 files changed, 219 insertions(+), 5 deletions(-) create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/SchedulerActivitiesInfo.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/scheduler/activities/ActivitiesManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/activities/ActivitiesManager.java index cc02ff6..49ffcb6 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/activities/ActivitiesManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/activities/ActivitiesManager.java @@ -20,6 +20,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; +import org.apache.commons.lang3.tuple.Pair; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler; @@ -44,8 +45,10 @@ import org.apache.hadoop.yarn.util.SystemClock; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicInteger; import java.util.List; import java.util.Set; import java.util.*; @@ -75,7 +78,7 @@ appsAllocation; @VisibleForTesting ConcurrentMap> completedAppAllocations; - private boolean recordNextAvailableNode = false; + private AtomicInteger recordCount = new AtomicInteger(0); private List lastAvailableNodeActivities = null; private Thread cleanUpThread; private long activitiesCleanupIntervalMs; @@ -86,6 +89,8 @@ private final RMContext rmContext; private volatile boolean stopped; private ThreadLocal diagnosticCollectorManager; + private volatile ConcurrentLinkedDeque>> + lastNActivities; public ActivitiesManager(RMContext rmContext) { super(ActivitiesManager.class.getName()); @@ -102,6 +107,8 @@ public ActivitiesManager(RMContext rmContext) { if (rmContext.getYarnConfiguration() != null) { setupConfForCleanup(rmContext.getYarnConfiguration()); } + lastNActivities = new ConcurrentLinkedDeque>>(); } private void setupConfForCleanup(Configuration conf) { @@ -215,9 +222,30 @@ public ActivitiesInfo getActivitiesInfo(String nodeId, return new ActivitiesInfo(allocations, nodeId, groupBy); } + public List recordAndGetlastNActivitiesInfo( + int activitiesCount, RMWSConsts.ActivitiesGroupBy groupBy) + throws InterruptedException { + recordCount.set(activitiesCount); + while (recordCount.get() > 0) { + Thread.sleep(1); + } + Iterator>> ite = + lastNActivities.iterator(); + List outList = new ArrayList<>(); + while (ite.hasNext()) { + Pair> pair = ite.next(); + outList.add(new ActivitiesInfo(pair.getRight(), + pair.getLeft().toString(), groupBy)); + } + // reset with new activities + lastNActivities = new ConcurrentLinkedDeque>>(); + return outList; + } + public void recordNextNodeUpdateActivities(String nodeId) { if (nodeId == null) { - recordNextAvailableNode = true; + recordCount.set(1); } else { activeRecordedNodes.add(NodeId.fromString(nodeId)); } @@ -348,7 +376,7 @@ protected void serviceStop() throws Exception { } void startNodeUpdateRecording(NodeId nodeID) { - if (recordNextAvailableNode) { + if (recordCount.get() > 0) { recordNextNodeUpdateActivities(nodeID.toString()); } // Removing from activeRecordedNodes immediately is to ensure that @@ -470,14 +498,17 @@ void finishNodeUpdateRecording(NodeId nodeID, String partition) { allocation.setTimestamp(timestamp); allocation.setPartition(partition); } - if (recordNextAvailableNode) { - recordNextAvailableNode = false; + if (recordCount.get() > 0) { + recordCount.getAndDecrement(); } } if (shouldRecordThisNode(nodeID)) { recordingNodesAllocation.get().remove(nodeID); completedNodeAllocations.put(nodeID, value); + if (recordCount.get() >= 0) { + lastNActivities.add(Pair.of(nodeID, value)); + } } } // disable diagnostic collector 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 30406e5..7bcc949 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 @@ -81,6 +81,10 @@ /** Path for {@code RMWebServiceProtocol#getActivities}. */ public static final String SCHEDULER_ACTIVITIES = "/scheduler/activities"; + /** Path for {@code RMWebServiceProtocol#getLastNActivities}. */ + public static final String SCHEDULER_BULK_ACTIVITIES = + "/scheduler/bulkactivities"; + /** Path for {@code RMWebServiceProtocol#getAppActivities}. */ public static final String SCHEDULER_APP_ACTIVITIES = "/scheduler/app-activities/{appid}"; @@ -252,6 +256,7 @@ public static final String ACTIONS = "actions"; public static final String SUMMARIZE = "summarize"; public static final String NAME = "name"; + public static final String ACTIVITIES_COUNT = "activitiesCount"; private RMWSConsts() { // not called 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 a41208e..141ef2e 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 @@ -60,6 +60,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationUpdateRequestInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerActivitiesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo; /** @@ -213,6 +214,19 @@ ActivitiesInfo getActivities(HttpServletRequest hsr, String nodeId, String groupBy); /** + * This method retrieve the last n activities inside scheduler and it is + * reachable by using {@link RMWSConsts#SCHEDULER_BULK_ACTIVITIES}. + * + * @param hsr the servlet request + * @param groupBy the groupBy type by which the activities should be + * aggregated. It is a QueryParam. + * @param activitiesCount number of activities + * @return last n activities + */ + SchedulerActivitiesInfo getLastNActivities(HttpServletRequest hsr, + String groupBy, int activitiesCount) throws InterruptedException; + + /** * This method retrieves all the activities for a specific app for a specific * period of time, and it is reachable by using * {@link RMWSConsts#SCHEDULER_APP_ACTIVITIES}. 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 dfdaba9..7d4e531 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 @@ -197,6 +197,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerActivitiesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.StatisticsItemInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ConfigVersionInfo; @@ -242,6 +243,7 @@ public static final String DEFAULT_END_TIME = "-1"; public static final String DEFAULT_INCLUDE_RESOURCE = "false"; public static final String DEFAULT_SUMMARIZE = "false"; + public static final String DEFAULT_ACTIVITIES_COUNT = "10"; @VisibleForTesting boolean isCentralizedNodeLabelConfiguration = true; @@ -771,6 +773,52 @@ public ActivitiesInfo getActivities(@Context HttpServletRequest hsr, } @GET + @Path(RMWSConsts.SCHEDULER_BULK_ACTIVITIES) + @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, + MediaType.APPLICATION_XML + "; " + JettyUtils.UTF_8 }) + @Override + public SchedulerActivitiesInfo getLastNActivities( + @Context HttpServletRequest hsr, + @QueryParam(RMWSConsts.GROUP_BY) String groupBy, + @QueryParam(RMWSConsts.ACTIVITIES_COUNT) + @DefaultValue(DEFAULT_ACTIVITIES_COUNT) int activitiesCount) + throws InterruptedException { + + initForReadableEndpoints(); + + YarnScheduler scheduler = rm.getRMContext().getScheduler(); + if (scheduler instanceof AbstractYarnScheduler) { + AbstractYarnScheduler abstractYarnScheduler = + (AbstractYarnScheduler) scheduler; + ActivitiesManager activitiesManager = + abstractYarnScheduler.getActivitiesManager(); + + if (activitiesManager != null) { + RMWSConsts.ActivitiesGroupBy activitiesGroupBy; + try { + activitiesGroupBy = parseActivitiesGroupBy(groupBy); + } catch (IllegalArgumentException e) { + throw new BadRequestException(e.getMessage()); + } + + if (activitiesCount <= 0) { + activitiesCount = Integer.parseInt(DEFAULT_ACTIVITIES_COUNT); + } + List activitiesList = activitiesManager + .recordAndGetlastNActivitiesInfo(activitiesCount, + activitiesGroupBy); + SchedulerActivitiesInfo schedulerActivities = new + SchedulerActivitiesInfo(); + schedulerActivities.addAll(activitiesList); + + return schedulerActivities; + } + } + throw new BadRequestException(RMWSConsts.SCHEDULER_BULK_ACTIVITIES + + "is supported only for CapacityScheduler"); + } + + @GET @Path(RMWSConsts.SCHEDULER_APP_ACTIVITIES) @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, MediaType.APPLICATION_XML + "; " + 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/SchedulerActivitiesInfo.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/SchedulerActivitiesInfo.java new file mode 100644 index 0000000..d8c22b1 --- /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/SchedulerActivitiesInfo.java @@ -0,0 +1,60 @@ +/** + * 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 org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import com.google.common.base.Strings; + +import org.apache.hadoop.yarn.api.records.NodeId; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.activities.NodeAllocation; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWSConsts; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.Date; +import java.util.List; +import java.util.ArrayList; + +/** + * DAO object to display allocation activities. + */ +@XmlRootElement(name = "schedulerActivities") +@XmlAccessorType(XmlAccessType.FIELD) +public class SchedulerActivitiesInfo { + + protected ArrayList activities = new ArrayList(); + + public SchedulerActivitiesInfo() { + // JAXB needs this + } + + public void add(ActivitiesInfo activitiesInfo) { + activities.add(activitiesInfo); + } + + public ArrayList getActivities() { + return activities; + } + + public void addAll(List activitiesInfoList) { + activities.addAll(activitiesInfoList); + } +} 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 90ca992..a93e1e3 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 @@ -60,6 +60,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationUpdateRequestInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerActivitiesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo; import org.apache.hadoop.yarn.server.webapp.dao.AppAttemptInfo; import org.apache.hadoop.yarn.server.webapp.dao.ContainerInfo; @@ -200,6 +201,15 @@ public ActivitiesInfo getActivities(HttpServletRequest hsr, String nodeId, } @Override + public SchedulerActivitiesInfo getLastNActivities(HttpServletRequest hsr, + String groupBy, int activitiesCount) throws InterruptedException { + return RouterWebServiceUtil.genericForward(webAppAddress, hsr, + SchedulerActivitiesInfo.class, HTTPMethods.GET, + RMWSConsts.RM_WEB_SERVICE_PATH + RMWSConsts.SCHEDULER_BULK_ACTIVITIES, null, + null, getConf()); + } + + @Override public AppActivitiesInfo getAppActivities(HttpServletRequest hsr, String appId, String time, Set requestPriorities, Set allocationRequestIds, String groupBy, String limit, 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 b14da6c..0928106 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 @@ -88,6 +88,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationUpdateRequestInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerActivitiesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo; import org.apache.hadoop.yarn.server.router.RouterMetrics; import org.apache.hadoop.yarn.server.router.RouterServerUtil; @@ -1148,6 +1149,12 @@ public ActivitiesInfo getActivities(HttpServletRequest hsr, String nodeId, } @Override + public SchedulerActivitiesInfo getLastNActivities(HttpServletRequest hsr, + String groupBy, int activitiesCount) throws InterruptedException { + throw new NotImplementedException("Code is not implemented"); + } + + @Override public AppActivitiesInfo getAppActivities(HttpServletRequest hsr, String appId, String time, Set requestPriorities, Set allocationRequestIds, String groupBy, String limit, 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 4c694fb..c944f3f 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 @@ -83,6 +83,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationUpdateRequestInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerActivitiesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo; import org.apache.hadoop.yarn.server.router.Router; import org.apache.hadoop.yarn.server.webapp.dao.ContainerInfo; @@ -95,6 +96,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import static org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWebServices.DEFAULT_ACTIVITIES_COUNT; import static org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWebServices.DEFAULT_SUMMARIZE; /** @@ -458,6 +460,22 @@ public ActivitiesInfo getActivities(@Context HttpServletRequest hsr, } @GET + @Path(RMWSConsts.SCHEDULER_BULK_ACTIVITIES) + @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, + MediaType.APPLICATION_XML + "; " + JettyUtils.UTF_8 }) + @Override + public SchedulerActivitiesInfo getLastNActivities(@Context HttpServletRequest hsr, + @QueryParam(RMWSConsts.GROUP_BY) String groupBy, + @QueryParam(RMWSConsts.ACTIVITIES_COUNT) + @DefaultValue(DEFAULT_ACTIVITIES_COUNT) int activitiesCount) + throws InterruptedException { + init(); + RequestInterceptorChainWrapper pipeline = getInterceptorChain(hsr); + return pipeline.getRootInterceptor().getLastNActivities(hsr, groupBy, + activitiesCount); + } + + @GET @Path(RMWSConsts.SCHEDULER_APP_ACTIVITIES) @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, MediaType.APPLICATION_XML + "; " + 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/BaseRouterWebServicesTest.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/BaseRouterWebServicesTest.java index b626a8a..3e87e75 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/BaseRouterWebServicesTest.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/BaseRouterWebServicesTest.java @@ -50,6 +50,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsInfo; 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.SchedulerActivitiesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo; import org.apache.hadoop.yarn.server.router.Router; import org.apache.hadoop.yarn.server.router.webapp.RouterWebServices.RequestInterceptorChainWrapper; @@ -179,6 +180,12 @@ protected ActivitiesInfo getActivities(String user) createHttpServletRequest(user), null, null); } + protected SchedulerActivitiesInfo getLastNActivities(String user) + throws InterruptedException { + return routerWebService.getLastNActivities( + createHttpServletRequest(user), null, 0); + } + protected AppActivitiesInfo getAppActivities(String user) throws IOException, InterruptedException { return routerWebService.getAppActivities(createHttpServletRequest(user), 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 f6dbb7f..f62be19 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 @@ -57,6 +57,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationUpdateRequestInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerActivitiesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo; import org.apache.hadoop.yarn.server.webapp.dao.AppAttemptInfo; import org.apache.hadoop.yarn.server.webapp.dao.ContainerInfo; @@ -139,6 +140,12 @@ public ActivitiesInfo getActivities(HttpServletRequest hsr, String nodeId, } @Override + public SchedulerActivitiesInfo getLastNActivities(HttpServletRequest hsr, + String groupBy, int activitiesCount) throws InterruptedException { + return new SchedulerActivitiesInfo(); + } + + @Override public AppActivitiesInfo getAppActivities(HttpServletRequest hsr, String appId, String time, Set requestPriorities, Set allocationRequestIds, String groupBy, String limit, 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 55de7a4..d6cd194 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 @@ -55,6 +55,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationUpdateRequestInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerActivitiesInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo; import org.apache.hadoop.yarn.server.webapp.dao.AppAttemptInfo; import org.apache.hadoop.yarn.server.webapp.dao.ContainerInfo; @@ -167,6 +168,12 @@ public ActivitiesInfo getActivities(HttpServletRequest hsr, String nodeId, } @Override + public SchedulerActivitiesInfo getLastNActivities(HttpServletRequest hsr, + String groupBy, int activitiesCount) throws InterruptedException { + return getNextInterceptor().getLastNActivities(hsr, groupBy, activitiesCount); + } + + @Override public AppActivitiesInfo getAppActivities(HttpServletRequest hsr, String appId, String time, Set requestPriorities, Set allocationRequestIds, String groupBy, String limit, -- 2.7.4 (Apple Git-66)