From 334fd9e83fedceaec82d91b126841ff62ab8b9a8 Mon Sep 17 00:00:00 2001 From: Subru Krishnan Date: Thu, 27 Oct 2016 17:43:13 -0700 Subject: [PATCH] YARN-2306. Add test for leakage of reservation metrics in fair scheduler. (Hong Zhiguo and Yufei Gu via subru). (cherry picked from commit b2c4f24c31e73faa8f71d44db5de3aa91e3b7d5e) --- .../scheduler/fair/TestFairScheduler.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java index 1fa120a12cf..9221b1d20bc 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java @@ -4761,4 +4761,56 @@ public void testRefreshQueuesWhenRMHA() throws Exception { rm1.stop(); rm2.stop(); } + + @Test + public void testReservationMetrics() throws IOException { + scheduler.init(conf); + scheduler.start(); + scheduler.reinitialize(conf, resourceManager.getRMContext()); + QueueMetrics metrics = scheduler.getRootQueueMetrics(); + + RMNode node1 = + MockNodes + .newNodeInfo(1, Resources.createResource(4096, 4), 1, "127.0.0.1"); + NodeAddedSchedulerEvent nodeEvent = new NodeAddedSchedulerEvent(node1); + scheduler.handle(nodeEvent); + + ApplicationAttemptId appAttemptId = createAppAttemptId(1, 1); + createApplicationWithAMResource(appAttemptId, "default", "user1", null); + + NodeUpdateSchedulerEvent updateEvent = new NodeUpdateSchedulerEvent(node1); + scheduler.update(); + scheduler.handle(updateEvent); + + createSchedulingRequestExistingApplication(1024, 1, 1, appAttemptId); + scheduler.handle(updateEvent); + + // no reservation yet + assertEquals(0, metrics.getReservedContainers()); + assertEquals(0, metrics.getReservedMB()); + assertEquals(0, metrics.getReservedVirtualCores()); + + // create reservation of {4096, 4} + createSchedulingRequestExistingApplication(4096, 4, 1, appAttemptId); + scheduler.update(); + scheduler.handle(updateEvent); + + // reservation created + assertEquals(1, metrics.getReservedContainers()); + assertEquals(4096, metrics.getReservedMB()); + assertEquals(4, metrics.getReservedVirtualCores()); + + // remove AppAttempt + AppAttemptRemovedSchedulerEvent attRemoveEvent = + new AppAttemptRemovedSchedulerEvent( + appAttemptId, + RMAppAttemptState.KILLED, + false); + scheduler.handle(attRemoveEvent); + + // The reservation metrics should be subtracted + assertEquals(0, metrics.getReservedContainers()); + assertEquals(0, metrics.getReservedMB()); + assertEquals(0, metrics.getReservedVirtualCores()); + } }