diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index 1840b1bdec..c4b1986605 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -377,6 +377,9 @@ Release 2.8.0 - UNRELEASED
YARN-4019. Add JvmPauseMonitor to ResourceManager and NodeManager. (Robert Kanter
via junping_du)
+ YARN-3974. Refactor the reservation system test cases to use parameterized
+ base test. (subru via curino)
+
OPTIMIZATIONS
YARN-3339. TestDockerContainerExecutor should pull a single image and not
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.java
index f7ffbd0eff..a708a4af21 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/Plan.java
@@ -19,7 +19,6 @@
package org.apache.hadoop.yarn.server.resourcemanager.reservation;
import org.apache.hadoop.yarn.api.records.ReservationDefinition;
-import org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.ReservationAgent;
/**
* A Plan represents the central data structure of a reservation system that
@@ -28,7 +27,7 @@
* previously accepted will be honored.
*
* {@link ReservationDefinition} submitted by the users through the RM public
- * APIs are passed to appropriate {@link ReservationAgent}s, which in turn will
+ * APIs are passed to appropriate {@code ReservationAgent}s, which in turn will
* consult the Plan (via the {@link PlanView} interface) and try to determine
* whether there are sufficient resources available in this Plan to satisfy the
* temporal and resource constraints of a {@link ReservationDefinition}. If a
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanView.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanView.java
index be68906e81..66c66cacb4 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanView.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/PlanView.java
@@ -17,15 +17,14 @@
*/
package org.apache.hadoop.yarn.server.resourcemanager.reservation;
-import java.util.Set;
-
import org.apache.hadoop.yarn.api.records.ReservationId;
import org.apache.hadoop.yarn.api.records.Resource;
-import org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.ReservationAgent;
+
+import java.util.Set;
/**
* This interface provides a read-only view on the allocations made in this
- * plan. This methods are used for example by {@link ReservationAgent}s to
+ * plan. This methods are used for example by {@code ReservationAgent}s to
* determine the free resources in a certain point in time, and by
* PlanFollowerPolicy to publish this plan to the scheduler.
*/
@@ -66,7 +65,7 @@ public interface PlanView extends PlanContext {
* @return the total {@link Resource} reserved for all users at the specified
* time
*/
- public Resource getTotalCommittedResources(long tick);
+ Resource getTotalCommittedResources(long tick);
/**
* Returns the total {@link Resource} reserved for a given user at the
@@ -88,7 +87,7 @@ public interface PlanView extends PlanContext {
* @return the overall capacity in terms of {@link Resource} assigned to this
* plan
*/
- public Resource getTotalCapacity();
+ Resource getTotalCapacity();
/**
* Gets the time (UTC in ms) at which the first reservation starts
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSchedulerConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSchedulerConfiguration.java
index c430b1fea5..afca8f9349 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSchedulerConfiguration.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSchedulerConfiguration.java
@@ -21,8 +21,6 @@
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.api.records.ReservationDefinition;
-import org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.ReservationAgent;
-import org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.Planner;
public abstract class ReservationSchedulerConfiguration extends Configuration {
@@ -64,7 +62,7 @@ public ReservationSchedulerConfiguration(
/**
* Checks if the queue participates in reservation based scheduling
- * @param queue
+ * @param queue name of the queue
* @return true if the queue participates in reservation based scheduling
*/
public abstract boolean isReservable(String queue);
@@ -110,10 +108,10 @@ public String getReservationAdmissionPolicy(String queue) {
}
/**
- * Gets the name of the {@link ReservationAgent} class associated with the
+ * Gets the name of the {@code ReservationAgent} class associated with the
* queue
* @param queue name of the queue
- * @return the class name of the {@link ReservationAgent}
+ * @return the class name of the {@code ReservationAgent}
*/
public String getReservationAgent(String queue) {
return DEFAULT_RESERVATION_AGENT_NAME;
@@ -129,10 +127,10 @@ public boolean getShowReservationAsQueues(String queuePath) {
}
/**
- * Gets the name of the {@link Planner} class associated with the
+ * Gets the name of the {@code Planner} class associated with the
* queue
* @param queue name of the queue
- * @return the class name of the {@link Planner}
+ * @return the class name of the {@code Planner}
*/
public String getReplanner(String queue) {
return DEFAULT_RESERVATION_PLANNER_NAME;
@@ -150,7 +148,7 @@ public boolean getMoveOnExpiry(String queue) {
}
/**
- * Gets the time in milliseconds for which the {@link Planner} will verify
+ * Gets the time in milliseconds for which the {@code Planner} will verify
* the {@link Plan}s satisfy the constraints
* @param queue name of the queue
* @return the time in milliseconds for which to check constraints
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystem.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystem.java
index 3309693843..7785885735 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystem.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystem.java
@@ -18,8 +18,6 @@
package org.apache.hadoop.yarn.server.resourcemanager.reservation;
-import java.util.Map;
-
import org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.conf.Configuration;
@@ -28,16 +26,15 @@
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.Queue;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
-import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
-import org.apache.hadoop.yarn.api.records.Resource;
-import org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.ReservationAgent;
+
+import java.util.Map;
/**
* This interface is the one implemented by any system that wants to support
- * Reservations i.e. make {@link Resource} allocations in future. Implementors
+ * Reservations i.e. make {@code Resource} allocations in future. Implementors
* need to bootstrap all configured {@link Plan}s in the active
* {@link ResourceScheduler} along with their corresponding
- * {@link ReservationAgent} and {@link SharingPolicy}. It is also responsible
+ * {@code ReservationAgent} and {@link SharingPolicy}. It is also responsible
* for managing the {@link PlanFollower} to ensure the {@link Plan}s are in sync
* with the {@link ResourceScheduler}.
*/
@@ -49,7 +46,7 @@ public interface ReservationSystem {
* Set RMContext for {@link ReservationSystem}. This method should be called
* immediately after instantiating a reservation system once.
*
- * @param rmContext created by {@link ResourceManager}
+ * @param rmContext created by {@code ResourceManager}
*/
void setRMContext(RMContext rmContext);
@@ -57,7 +54,7 @@ public interface ReservationSystem {
* Re-initialize the {@link ReservationSystem}.
*
* @param conf configuration
- * @param rmContext current context of the {@link ResourceManager}
+ * @param rmContext current context of the {@code ResourceManager}
* @throws YarnException
*/
void reinitialize(Configuration conf, RMContext rmContext)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystemTestUtil.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystemTestUtil.java
index e07b33ea61..954023b2e0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystemTestUtil.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/ReservationSystemTestUtil.java
@@ -1,19 +1,19 @@
/*******************************************************************************
- * 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.
+ * 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.reservation;
@@ -73,11 +73,11 @@ public static ReservationId getNewReservationId() {
public static ReservationSchedulerConfiguration createConf(
String reservationQ, long timeWindow, float instConstraint,
float avgConstraint) {
- ReservationSchedulerConfiguration conf = mock
- (ReservationSchedulerConfiguration.class);
+ ReservationSchedulerConfiguration conf =
+ mock(ReservationSchedulerConfiguration.class);
when(conf.getReservationWindow(reservationQ)).thenReturn(timeWindow);
- when(conf.getInstantaneousMaxCapacity(reservationQ)).thenReturn
- (instConstraint);
+ when(conf.getInstantaneousMaxCapacity(reservationQ))
+ .thenReturn(instConstraint);
when(conf.getAverageCapacity(reservationQ)).thenReturn(avgConstraint);
return conf;
}
@@ -91,21 +91,8 @@ public static void validateReservationQueue(
Assert.assertEquals(8192, plan.getTotalCapacity().getMemory());
Assert.assertTrue(
plan.getReservationAgent() instanceof AlignedPlannerWithGreedy);
- Assert.assertTrue(
- plan.getSharingPolicy() instanceof CapacityOverTimePolicy);
- }
-
- public static void validateNewReservationQueue(
- AbstractReservationSystem reservationSystem, String newQ) {
- Plan newPlan = reservationSystem.getPlan(newQ);
- Assert.assertNotNull(newPlan);
- Assert.assertTrue(newPlan instanceof InMemoryPlan);
- Assert.assertEquals(newQ, newPlan.getQueueName());
- Assert.assertEquals(1024, newPlan.getTotalCapacity().getMemory());
Assert
- .assertTrue(newPlan.getReservationAgent() instanceof AlignedPlannerWithGreedy);
- Assert
- .assertTrue(newPlan.getSharingPolicy() instanceof CapacityOverTimePolicy);
+ .assertTrue(plan.getSharingPolicy() instanceof CapacityOverTimePolicy);
}
public static void setupFSAllocationFile(String allocationFile)
@@ -129,7 +116,8 @@ public static void setupFSAllocationFile(String allocationFile)
out.println("");
out.println("8");
out.println("");
- out.println("drf");
+ out.println(
+ "drf");
out.println("");
out.close();
}
@@ -153,21 +141,20 @@ public static void updateFSAllocationFile(String allocationFile)
out.println("");
out.println("");
out.println("");
- out.println("80");
+ out.println("10");
out.println("");
out.println("");
out.println("");
- out.println("10");
+ out.println("80");
out.println("");
- out.println("drf");
+ out.println(
+ "drf");
out.println("");
out.close();
}
- public static FairScheduler setupFairScheduler(
- ReservationSystemTestUtil testUtil,
- RMContext rmContext, Configuration conf, int numContainers) throws
- IOException {
+ public static FairScheduler setupFairScheduler(RMContext rmContext,
+ Configuration conf, int numContainers) throws IOException {
FairScheduler scheduler = new FairScheduler();
scheduler.setRMContext(rmContext);
@@ -178,7 +165,8 @@ public static FairScheduler setupFairScheduler(
scheduler.reinitialize(conf, rmContext);
- Resource resource = testUtil.calculateClusterResource(numContainers);
+ Resource resource =
+ ReservationSystemTestUtil.calculateClusterResource(numContainers);
RMNode node1 = MockNodes.newNodeInfo(1, resource, 1, "127.0.0.1");
NodeAddedSchedulerEvent nodeEvent1 = new NodeAddedSchedulerEvent(node1);
scheduler.handle(nodeEvent1);
@@ -224,8 +212,9 @@ public CapacityScheduler mockCapacityScheduler(int numContainers)
return cs;
}
- public static void initializeRMContext(int numContainers,
- AbstractYarnScheduler scheduler, RMContext mockRMContext) {
+ @SuppressWarnings("rawtypes") public static void initializeRMContext(
+ int numContainers, AbstractYarnScheduler scheduler,
+ RMContext mockRMContext) {
when(mockRMContext.getScheduler()).thenReturn(scheduler);
Resource r = calculateClusterResource(numContainers);
@@ -233,18 +222,17 @@ public static void initializeRMContext(int numContainers,
}
public static RMContext createRMContext(Configuration conf) {
- RMContext mockRmContext =
- Mockito.spy(new RMContextImpl(null, null, null, null, null, null,
+ RMContext mockRmContext = Mockito.spy(
+ new RMContextImpl(null, null, null, null, null, null,
new RMContainerTokenSecretManager(conf),
new NMTokenSecretManagerInRM(conf),
new ClientToAMTokenSecretManagerInRM(), null));
RMNodeLabelsManager nlm = mock(RMNodeLabelsManager.class);
- when(
- nlm.getQueueResource(any(String.class), anySetOf(String.class),
+ when(nlm.getQueueResource(any(String.class), anySetOf(String.class),
any(Resource.class))).thenAnswer(new Answer() {
- @Override
- public Resource answer(InvocationOnMock invocation) throws Throwable {
+ @Override public Resource answer(InvocationOnMock invocation)
+ throws Throwable {
Object[] args = invocation.getArguments();
return (Resource) args[2];
}
@@ -252,8 +240,8 @@ public Resource answer(InvocationOnMock invocation) throws Throwable {
when(nlm.getResourceByLabel(any(String.class), any(Resource.class)))
.thenAnswer(new Answer() {
- @Override
- public Resource answer(InvocationOnMock invocation) throws Throwable {
+ @Override public Resource answer(InvocationOnMock invocation)
+ throws Throwable {
Object[] args = invocation.getArguments();
return (Resource) args[1];
}
@@ -263,21 +251,22 @@ public Resource answer(InvocationOnMock invocation) throws Throwable {
return mockRmContext;
}
- public static void setupQueueConfiguration(CapacitySchedulerConfiguration conf) {
+ public static void setupQueueConfiguration(
+ CapacitySchedulerConfiguration conf) {
// Define default queue
final String defQ = CapacitySchedulerConfiguration.ROOT + ".default";
conf.setCapacity(defQ, 10);
// Define top-level queues
- conf.setQueues(CapacitySchedulerConfiguration.ROOT, new String[] {
- "default", "a", reservationQ });
+ conf.setQueues(CapacitySchedulerConfiguration.ROOT,
+ new String[] { "default", "a", reservationQ });
final String A = CapacitySchedulerConfiguration.ROOT + ".a";
conf.setCapacity(A, 10);
final String dedicated =
- CapacitySchedulerConfiguration.ROOT
- + CapacitySchedulerConfiguration.DOT + reservationQ;
+ CapacitySchedulerConfiguration.ROOT + CapacitySchedulerConfiguration.DOT
+ + reservationQ;
conf.setCapacity(dedicated, 80);
// Set as reservation queue
conf.setReservable(dedicated, true);
@@ -290,44 +279,43 @@ public static void setupQueueConfiguration(CapacitySchedulerConfiguration conf)
conf.setCapacity(A2, 70);
}
- public String getFullReservationQueueName() {
+ public static String getFullReservationQueueName() {
return CapacitySchedulerConfiguration.ROOT
+ CapacitySchedulerConfiguration.DOT + reservationQ;
}
- public String getreservationQueueName() {
+ public static String getReservationQueueName() {
return reservationQ;
}
- public void updateQueueConfiguration(CapacitySchedulerConfiguration conf,
- String newQ) {
+ public static void updateQueueConfiguration(
+ CapacitySchedulerConfiguration conf, String newQ) {
// Define default queue
- final String prefix =
- CapacitySchedulerConfiguration.ROOT
- + CapacitySchedulerConfiguration.DOT;
+ final String prefix = CapacitySchedulerConfiguration.ROOT
+ + CapacitySchedulerConfiguration.DOT;
final String defQ = prefix + "default";
conf.setCapacity(defQ, 5);
// Define top-level queues
- conf.setQueues(CapacitySchedulerConfiguration.ROOT, new String[] {
- "default", "a", reservationQ, newQ });
+ conf.setQueues(CapacitySchedulerConfiguration.ROOT,
+ new String[] { "default", "a", reservationQ, newQ });
final String A = prefix + "a";
conf.setCapacity(A, 5);
final String dedicated = prefix + reservationQ;
- conf.setCapacity(dedicated, 80);
+ conf.setCapacity(dedicated, 10);
// Set as reservation queue
conf.setReservable(dedicated, true);
- conf.setCapacity(prefix + newQ, 10);
+ conf.setCapacity(prefix + newQ, 80);
// Set as reservation queue
conf.setReservable(prefix + newQ, true);
// Define 2nd-level queues
final String A1 = A + ".a1";
final String A2 = A + ".a2";
- conf.setQueues(A, new String[]{"a1", "a2"});
+ conf.setQueues(A, new String[] { "a1", "a2" });
conf.setCapacity(A1, 30);
conf.setCapacity(A2, 70);
}
@@ -349,9 +337,8 @@ public static ReservationDefinition generateRandomRR(Random rand, long i) {
int gang = 1 + rand.nextInt(9);
int par = (rand.nextInt(1000) + 1) * gang;
long dur = rand.nextInt(2 * 3600 * 1000); // random duration within 2h
- ReservationRequest r =
- ReservationRequest.newInstance(Resource.newInstance(1024, 1), par,
- gang, dur);
+ ReservationRequest r = ReservationRequest
+ .newInstance(Resource.newInstance(1024, 1), par, gang, dur);
ReservationRequests reqs = new ReservationRequestsPBImpl();
reqs.setReservationResources(Collections.singletonList(r));
rand.nextInt(3);
@@ -364,53 +351,19 @@ public static ReservationDefinition generateRandomRR(Random rand, long i) {
}
- public static ReservationDefinition generateBigRR(Random rand, long i) {
- rand.setSeed(i);
- long now = System.currentTimeMillis();
-
- // start time at random in the next 2 hours
- long arrival = rand.nextInt(2 * 3600 * 1000);
- // deadline at random in the next day
- long deadline = rand.nextInt(24 * 3600 * 1000);
-
- // create a request with a single atomic ask
- ReservationDefinition rr = new ReservationDefinitionPBImpl();
- rr.setArrival(now + arrival);
- rr.setDeadline(now + deadline);
-
- int gang = 1;
- int par = 100000; // 100k tasks
- long dur = rand.nextInt(60 * 1000); // 1min tasks
- ReservationRequest r =
- ReservationRequest.newInstance(Resource.newInstance(1024, 1), par,
- gang, dur);
- ReservationRequests reqs = new ReservationRequestsPBImpl();
- reqs.setReservationResources(Collections.singletonList(r));
- rand.nextInt(3);
- ReservationRequestInterpreter[] type =
- ReservationRequestInterpreter.values();
- reqs.setInterpreter(type[rand.nextInt(type.length)]);
- rr.setReservationRequests(reqs);
-
- return rr;
- }
-
public static Map generateAllocation(
long startTime, long step, int[] alloc) {
- Map req =
- new TreeMap();
+ Map req = new TreeMap<>();
for (int i = 0; i < alloc.length; i++) {
- req.put(new ReservationInterval(startTime + i * step, startTime + (i + 1)
- * step), ReservationSystemUtil.toResource(ReservationRequest
- .newInstance(
- Resource.newInstance(1024, 1), alloc[i])));
+ req.put(new ReservationInterval(startTime + i * step,
+ startTime + (i + 1) * step), ReservationSystemUtil.toResource(
+ ReservationRequest
+ .newInstance(Resource.newInstance(1024, 1), alloc[i])));
}
return req;
}
public static Resource calculateClusterResource(int numContainers) {
- Resource clusterResource = Resource.newInstance(numContainers * 1024,
- numContainers);
- return clusterResource;
+ return Resource.newInstance(numContainers * 1024, numContainers);
}
}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestCapacityReservationSystem.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestCapacityReservationSystem.java
deleted file mode 100644
index 11e52c4707..0000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestCapacityReservationSystem.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * 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.reservation;
-
-import java.io.IOException;
-
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
-import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
-import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class TestCapacityReservationSystem {
-
- @Test
- public void testInitialize() {
- ReservationSystemTestUtil testUtil = new ReservationSystemTestUtil();
- CapacityScheduler capScheduler = null;
- try {
- capScheduler = testUtil.mockCapacityScheduler(10);
- } catch (IOException e) {
- Assert.fail(e.getMessage());
- }
- CapacityReservationSystem reservationSystem =
- new CapacityReservationSystem();
- reservationSystem.setRMContext(capScheduler.getRMContext());
- try {
- reservationSystem.reinitialize(capScheduler.getConf(),
- capScheduler.getRMContext());
- } catch (YarnException e) {
- Assert.fail(e.getMessage());
- }
- String planQName = testUtil.getreservationQueueName();
- ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
- planQName);
- }
-
- @Test
- public void testReinitialize() {
- ReservationSystemTestUtil testUtil = new ReservationSystemTestUtil();
- CapacityScheduler capScheduler = null;
- try {
- capScheduler = testUtil.mockCapacityScheduler(10);
- } catch (IOException e) {
- Assert.fail(e.getMessage());
- }
- CapacityReservationSystem reservationSystem =
- new CapacityReservationSystem();
- CapacitySchedulerConfiguration conf = capScheduler.getConfiguration();
- RMContext mockContext = capScheduler.getRMContext();
- reservationSystem.setRMContext(mockContext);
- try {
- reservationSystem.reinitialize(capScheduler.getConfiguration(),
- mockContext);
- } catch (YarnException e) {
- Assert.fail(e.getMessage());
- }
- // Assert queue in original config
- String planQName = testUtil.getreservationQueueName();
- ReservationSystemTestUtil.validateReservationQueue(reservationSystem, planQName);
-
- // Dynamically add a plan
- String newQ = "reservation";
- Assert.assertNull(reservationSystem.getPlan(newQ));
- testUtil.updateQueueConfiguration(conf, newQ);
- try {
- capScheduler.reinitialize(conf, mockContext);
- } catch (IOException e) {
- Assert.fail(e.getMessage());
- }
- try {
- reservationSystem.reinitialize(conf, mockContext);
- } catch (YarnException e) {
- Assert.fail(e.getMessage());
- }
- ReservationSystemTestUtil.validateNewReservationQueue(reservationSystem, newQ);
- }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestCapacitySchedulerPlanFollower.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestCapacitySchedulerPlanFollower.java
index 15f9a89f1c..9152d1207f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestCapacitySchedulerPlanFollower.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestCapacitySchedulerPlanFollower.java
@@ -57,7 +57,8 @@
import org.mockito.Matchers;
import org.mockito.Mockito;
-public class TestCapacitySchedulerPlanFollower extends TestSchedulerPlanFollowerBase {
+public class TestCapacitySchedulerPlanFollower extends
+ TestSchedulerPlanFollowerBase {
private RMContext rmContext;
private RMContext spyRMContext;
@@ -116,11 +117,11 @@ public void setUp() throws Exception {
}
private void setupPlanFollower() throws Exception {
- ReservationSystemTestUtil testUtil = new ReservationSystemTestUtil();
mClock = mock(Clock.class);
mAgent = mock(ReservationAgent.class);
- String reservationQ = testUtil.getFullReservationQueueName();
+ String reservationQ =
+ ReservationSystemTestUtil.getFullReservationQueueName();
CapacitySchedulerConfiguration csConf = cs.getConfiguration();
csConf.setReservationWindow(reservationQ, 20L);
csConf.setMaximumCapacity(reservationQ, 40);
@@ -144,7 +145,7 @@ public void testWithKillOnExpiry() throws PlanningException,
@Override
protected void verifyCapacity(Queue defQ) {
- CSQueue csQueue = (CSQueue)defQ;
+ CSQueue csQueue = (CSQueue) defQ;
assertTrue(csQueue.getCapacity() > 0.9);
}
@@ -155,7 +156,7 @@ protected Queue getDefaultQueue() {
@Override
protected int getNumberOfApplications(Queue queue) {
- CSQueue csQueue = (CSQueue)queue;
+ CSQueue csQueue = (CSQueue) queue;
int numberOfApplications = csQueue.getNumApplications();
return numberOfApplications;
}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestFairReservationSystem.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestFairReservationSystem.java
deleted file mode 100644
index 4b685b28b0..0000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestFairReservationSystem.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * 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.reservation;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.yarn.conf.YarnConfiguration;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
-import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
-import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler;
-import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedulerConfiguration;
-import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedulerTestBase;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.IOException;
-
-public class TestFairReservationSystem {
- private final static String ALLOC_FILE = new File(FairSchedulerTestBase.
- TEST_DIR,
- TestFairReservationSystem.class.getName() + ".xml").getAbsolutePath();
- private Configuration conf;
- private FairScheduler scheduler;
- private FairSchedulerTestBase testHelper = new FairSchedulerTestBase();
-
- protected Configuration createConfiguration() {
- Configuration conf = testHelper.createConfiguration();
- conf.setClass(YarnConfiguration.RM_SCHEDULER, FairScheduler.class,
- ResourceScheduler.class);
- conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
- return conf;
- }
-
- @Before
- public void setup() throws IOException {
- conf = createConfiguration();
- }
-
- @After
- public void teardown() {
- conf = null;
- }
-
- @Test
- public void testFairReservationSystemInitialize() throws IOException {
- ReservationSystemTestUtil.setupFSAllocationFile(ALLOC_FILE);
-
- ReservationSystemTestUtil testUtil = new ReservationSystemTestUtil();
-
- // Setup
- RMContext mockRMContext = testUtil.createRMContext(conf);
- scheduler = ReservationSystemTestUtil.setupFairScheduler(testUtil,
- mockRMContext, conf, 10);
-
- FairReservationSystem reservationSystem = new FairReservationSystem();
- reservationSystem.setRMContext(mockRMContext);
-
- try {
- reservationSystem.reinitialize(scheduler.getConf(), mockRMContext);
- } catch (YarnException e) {
- Assert.fail(e.getMessage());
- }
-
- ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
- testUtil.getFullReservationQueueName());
- }
-
- @Test
- public void testFairReservationSystemReinitialize() throws IOException {
- ReservationSystemTestUtil.setupFSAllocationFile(ALLOC_FILE);
-
- ReservationSystemTestUtil testUtil = new ReservationSystemTestUtil();
-
- // Setup
- RMContext mockRMContext = testUtil.createRMContext(conf);
- scheduler = ReservationSystemTestUtil.setupFairScheduler(testUtil,
- mockRMContext, conf, 10);
-
- FairReservationSystem reservationSystem = new FairReservationSystem();
- reservationSystem.setRMContext(mockRMContext);
-
- try {
- reservationSystem.reinitialize(scheduler.getConf(), mockRMContext);
- } catch (YarnException e) {
- Assert.fail(e.getMessage());
- }
-
- // Assert queue in original config
- final String planQNam = testUtil.getFullReservationQueueName();
- ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
- planQNam);
-
- // Dynamically add a plan
- ReservationSystemTestUtil.updateFSAllocationFile(ALLOC_FILE);
- scheduler.reinitialize(conf, mockRMContext);
-
- try {
- reservationSystem.reinitialize(conf, mockRMContext);
- } catch (YarnException e) {
- Assert.fail(e.getMessage());
- }
-
- String newQueue = "root.reservation";
- ReservationSystemTestUtil.validateNewReservationQueue
- (reservationSystem, newQueue);
- }
-
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestFairSchedulerPlanFollower.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestFairSchedulerPlanFollower.java
index 43316f7a58..1b4e2f8e13 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestFairSchedulerPlanFollower.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestFairSchedulerPlanFollower.java
@@ -1,20 +1,20 @@
/**
-* 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.
-*/
+ * 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.reservation;
import static org.junit.Assert.assertNotNull;
@@ -62,9 +62,9 @@
public class TestFairSchedulerPlanFollower extends
TestSchedulerPlanFollowerBase {
- private final static String ALLOC_FILE = new File(FairSchedulerTestBase.
- TEST_DIR,
- TestFairReservationSystem.class.getName() + ".xml").getAbsolutePath();
+ private final static String ALLOC_FILE = new File(
+ FairSchedulerTestBase.TEST_DIR,
+ TestSchedulerPlanFollowerBase.class.getName() + ".xml").getAbsolutePath();
private RMContext rmContext;
private RMContext spyRMContext;
private FairScheduler fs;
@@ -86,13 +86,11 @@ protected Configuration createConfiguration() {
public void setUp() throws Exception {
conf = createConfiguration();
ReservationSystemTestUtil.setupFSAllocationFile(ALLOC_FILE);
- ReservationSystemTestUtil testUtil = new ReservationSystemTestUtil();
// Setup
rmContext = TestUtils.getMockRMContext();
spyRMContext = spy(rmContext);
- fs = ReservationSystemTestUtil.setupFairScheduler(testUtil,
- spyRMContext, conf, 125);
+ fs = ReservationSystemTestUtil.setupFairScheduler(spyRMContext, conf, 125);
scheduler = fs;
ConcurrentMap spyApps =
@@ -108,11 +106,11 @@ public void setUp() throws Exception {
}
private void setupPlanFollower() throws Exception {
- ReservationSystemTestUtil testUtil = new ReservationSystemTestUtil();
mClock = mock(Clock.class);
mAgent = mock(ReservationAgent.class);
- String reservationQ = testUtil.getFullReservationQueueName();
+ String reservationQ =
+ ReservationSystemTestUtil.getFullReservationQueueName();
AllocationConfiguration allocConf = fs.getAllocationConfiguration();
allocConf.setReservationWindow(20L);
allocConf.setAverageCapacity(20);
@@ -135,14 +133,13 @@ public void testWithKillOnExpiry() throws PlanningException,
@Override
protected void verifyCapacity(Queue defQ) {
- assertTrue(((FSQueue) defQ).getWeights().getWeight(ResourceType.MEMORY) >
- 0.9);
+ assertTrue(((FSQueue) defQ).getWeights().getWeight(ResourceType.MEMORY) > 0.9);
}
@Override
protected Queue getDefaultQueue() {
- return getReservationQueue("dedicated" +
- ReservationConstants.DEFAULT_QUEUE_SUFFIX);
+ return getReservationQueue("dedicated"
+ + ReservationConstants.DEFAULT_QUEUE_SUFFIX);
}
@Override
@@ -153,8 +150,7 @@ protected int getNumberOfApplications(Queue queue) {
@Override
protected AbstractSchedulerPlanFollower createPlanFollower() {
- FairSchedulerPlanFollower planFollower =
- new FairSchedulerPlanFollower();
+ FairSchedulerPlanFollower planFollower = new FairSchedulerPlanFollower();
planFollower.init(mClock, scheduler, Collections.singletonList(plan));
return planFollower;
}
@@ -168,13 +164,13 @@ protected void assertReservationQueueExists(ReservationId r) {
@Override
protected void assertReservationQueueExists(ReservationId r,
double expectedCapacity, double expectedMaxCapacity) {
- FSLeafQueue q = fs.getQueueManager().getLeafQueue(plan.getQueueName() + "" +
- "." +
- r, false);
+ FSLeafQueue q =
+ fs.getQueueManager().getLeafQueue(plan.getQueueName() + "" + "." + r,
+ false);
assertNotNull(q);
// For now we are setting both to same weight
- Assert.assertEquals(expectedCapacity, q.getWeights().getWeight
- (ResourceType.MEMORY), 0.01);
+ Assert.assertEquals(expectedCapacity,
+ q.getWeights().getWeight(ResourceType.MEMORY), 0.01);
}
@Override
@@ -185,9 +181,8 @@ protected void assertReservationQueueDoesNotExist(ReservationId r) {
@Override
protected Queue getReservationQueue(String r) {
- return fs.getQueueManager().getLeafQueue(plan.getQueueName() + "" +
- "." +
- r, false);
+ return fs.getQueueManager().getLeafQueue(
+ plan.getQueueName() + "" + "." + r, false);
}
public static ApplicationACLsManager mockAppACLsManager() {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestReservationSystem.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestReservationSystem.java
new file mode 100644
index 0000000000..7fcf4bcae5
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestReservationSystem.java
@@ -0,0 +1,213 @@
+/*******************************************************************************
+ * 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.reservation;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import org.apache.hadoop.yarn.server.resourcemanager.ParameterizedSchedulerTestBase;
+import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.QueueMetrics;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedulerConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedulerTestBase;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import java.io.File;
+import java.io.IOException;
+
+@SuppressWarnings({ "rawtypes" })
+public class TestReservationSystem extends
+ ParameterizedSchedulerTestBase {
+
+ private final static String ALLOC_FILE = new File(
+ FairSchedulerTestBase.TEST_DIR, TestReservationSystem.class.getName()
+ + ".xml").getAbsolutePath();
+ private AbstractYarnScheduler scheduler;
+ private AbstractReservationSystem reservationSystem;
+ private RMContext rmContext;
+ private Configuration conf;
+ private RMContext mockRMContext;
+
+ public TestReservationSystem(SchedulerType type) {
+ super(type);
+ }
+
+ @Before
+ public void setUp() throws IOException {
+ scheduler = initializeScheduler();
+ rmContext = getRMContext();
+ reservationSystem = configureReservationSystem();
+ reservationSystem.setRMContext(rmContext);
+ DefaultMetricsSystem.setMiniClusterMode(true);
+ }
+
+ @After
+ public void tearDown() {
+ conf = null;
+ reservationSystem = null;
+ rmContext = null;
+ scheduler = null;
+ clearRMContext();
+ QueueMetrics.clearQueueMetrics();
+ }
+
+ @Test
+ public void testInitialize() throws IOException {
+ try {
+ reservationSystem.reinitialize(scheduler.getConfig(), rmContext);
+ } catch (YarnException e) {
+ Assert.fail(e.getMessage());
+ }
+ if (getSchedulerType().equals(SchedulerType.CAPACITY)) {
+ ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
+ ReservationSystemTestUtil.getReservationQueueName());
+ } else {
+ ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
+ ReservationSystemTestUtil.getFullReservationQueueName());
+ }
+
+ }
+
+ @Test
+ public void testReinitialize() throws IOException {
+ conf = scheduler.getConfig();
+ try {
+ reservationSystem.reinitialize(conf, rmContext);
+ } catch (YarnException e) {
+ Assert.fail(e.getMessage());
+ }
+ if (getSchedulerType().equals(SchedulerType.CAPACITY)) {
+ ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
+ ReservationSystemTestUtil.getReservationQueueName());
+ } else {
+ ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
+ ReservationSystemTestUtil.getFullReservationQueueName());
+ }
+
+ // Dynamically add a plan
+ String newQ = "reservation";
+ Assert.assertNull(reservationSystem.getPlan(newQ));
+ updateSchedulerConf(conf, newQ);
+ try {
+ scheduler.reinitialize(conf, rmContext);
+ } catch (IOException e) {
+ Assert.fail(e.getMessage());
+ }
+ try {
+ reservationSystem.reinitialize(conf, rmContext);
+ } catch (YarnException e) {
+ Assert.fail(e.getMessage());
+ }
+ if (getSchedulerType().equals(SchedulerType.CAPACITY)) {
+ ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
+ newQ);
+ } else {
+ ReservationSystemTestUtil.validateReservationQueue(reservationSystem,
+ "root." + newQ);
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ public AbstractYarnScheduler initializeScheduler() throws IOException {
+ switch (getSchedulerType()) {
+ case CAPACITY:
+ return initializeCapacityScheduler();
+ case FAIR:
+ return initializeFairScheduler();
+ }
+ return null;
+ }
+
+ public AbstractReservationSystem configureReservationSystem() {
+ switch (getSchedulerType()) {
+ case CAPACITY:
+ return new CapacityReservationSystem();
+ case FAIR:
+ return new FairReservationSystem();
+ }
+ return null;
+ }
+
+ public void updateSchedulerConf(Configuration conf, String newQ)
+ throws IOException {
+ switch (getSchedulerType()) {
+ case CAPACITY:
+ ReservationSystemTestUtil.updateQueueConfiguration(
+ (CapacitySchedulerConfiguration) conf, newQ);
+ case FAIR:
+ ReservationSystemTestUtil.updateFSAllocationFile(ALLOC_FILE);
+ }
+ }
+
+ public RMContext getRMContext() {
+ return mockRMContext;
+ }
+
+ public void clearRMContext() {
+ mockRMContext = null;
+ }
+
+ private CapacityScheduler initializeCapacityScheduler() {
+ // stolen from TestCapacityScheduler
+ CapacitySchedulerConfiguration conf = new CapacitySchedulerConfiguration();
+ ReservationSystemTestUtil.setupQueueConfiguration(conf);
+
+ CapacityScheduler cs = Mockito.spy(new CapacityScheduler());
+ cs.setConf(conf);
+
+ mockRMContext = ReservationSystemTestUtil.createRMContext(conf);
+
+ cs.setRMContext(mockRMContext);
+ try {
+ cs.serviceInit(conf);
+ } catch (Exception e) {
+ Assert.fail(e.getMessage());
+ }
+ ReservationSystemTestUtil.initializeRMContext(10, cs, mockRMContext);
+ return cs;
+ }
+
+ private Configuration createFSConfiguration() {
+ FairSchedulerTestBase testHelper = new FairSchedulerTestBase();
+ Configuration conf = testHelper.createConfiguration();
+ conf.setClass(YarnConfiguration.RM_SCHEDULER, FairScheduler.class,
+ ResourceScheduler.class);
+ conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
+ return conf;
+ }
+
+ private FairScheduler initializeFairScheduler() throws IOException {
+ Configuration conf = createFSConfiguration();
+ ReservationSystemTestUtil.setupFSAllocationFile(ALLOC_FILE);
+
+ // Setup
+ mockRMContext = ReservationSystemTestUtil.createRMContext(conf);
+ return ReservationSystemTestUtil
+ .setupFairScheduler(mockRMContext, conf, 10);
+ }
+}