Author: suresh
Date: Thu Jan 3 21:31:02 2013
New Revision: 1428604
URL: http://svn.apache.org/viewvc?rev=1428604&view=rev
Log:
Merging trunk to branch-trunk-win
Added:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClient.java
- copied unchanged from r1428601,
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClient.java
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientImpl.java
- copied unchanged from r1428601,
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientImpl.java
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestAMRMClient.java
- copied unchanged from r1428601,
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestAMRMClient.java
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/CHANGES.txt
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/pom.xml
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueueManager.java
hadoop/common/branches/branch-trunk-win/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
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/CHANGES.txt?rev=1428604&r1=1428603&r2=1428604&view=diff
==============================================================================
--- hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/CHANGES.txt
(original)
+++ hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/CHANGES.txt Thu
Jan 3 21:31:02 2013
@@ -28,6 +28,8 @@ Release 2.0.3-alpha - Unreleased
YARN-230. RM Restart phase 1 - includes support for saving/restarting all
applications on an RM bounce. (Bikas Saha via acmurthy)
+ YARN-103. Add a yarn AM-RM client module. (Bikas Saha via sseth)
+
IMPROVEMENTS
YARN-223. Update process tree instead of getting new process trees.
@@ -155,6 +157,18 @@ Release 2.0.3-alpha - Unreleased
YARN-283. Fair scheduler fails to get queue info without root prefix.
(sandyr via tucu)
+ YARN-192. Node update causes NPE in the fair scheduler.
+ (Sandy Ryza via tomwhite)
+
+ YARN-288. Fair scheduler queue doesn't accept any jobs when ACLs are
+ configured. (Sandy Ryza via tomwhite)
+
+ YARN-300. After YARN-271, fair scheduler can infinite loop and not
+ schedule any application. (Sandy Ryza via tomwhite)
+
+ YARN-301. Fair scheduler throws ConcurrentModificationException when
+ iterating over app's priorities. (Sandy Ryza via tomwhite)
+
Release 2.0.2-alpha - 2012-09-07
INCOMPATIBLE CHANGES
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/pom.xml
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/pom.xml?rev=1428604&r1=1428603&r2=1428604&view=diff
==============================================================================
---
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/pom.xml
(original)
+++
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/pom.xml
Thu Jan 3 21:31:02 2013
@@ -36,7 +36,13 @@
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-yarn-server-resourcemanager</artifactId>
- <scope>test</scope>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-yarn-server-tests</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java?rev=1428604&r1=1428603&r2=1428604&view=diff
==============================================================================
---
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java
(original)
+++
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java
Thu Jan 3 21:31:02 2013
@@ -18,6 +18,9 @@
package org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair;
+import java.util.Arrays;
+import java.util.Collection;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience.Private;
@@ -293,39 +296,45 @@ public class AppSchedulable extends Sche
} else {
// If this app is over quota, don't schedule anything
if (!(getRunnable())) { return Resources.none(); }
-
}
+
+ Collection<Priority> prioritiesToTry = (reserved) ?
+ Arrays.asList(node.getReservedContainer().getReservedPriority()) :
+ app.getPriorities();
+
// For each priority, see if we can schedule a node local, rack local
// or off-switch request. Rack of off-switch requests may be delayed
// (not scheduled) in order to promote better locality.
- for (Priority priority : app.getPriorities()) {
- app.addSchedulingOpportunity(priority);
- NodeType allowedLocality = app.getAllowedLocalityLevel(priority,
- scheduler.getNumClusterNodes(), scheduler.getNodeLocalityThreshold(),
- scheduler.getRackLocalityThreshold());
-
- ResourceRequest localRequest = app.getResourceRequest(priority,
- node.getHostName());
- if (localRequest != null && localRequest.getNumContainers() != 0) {
- return assignContainer(node, app, priority,
- localRequest, NodeType.NODE_LOCAL, reserved);
- }
-
- ResourceRequest rackLocalRequest = app.getResourceRequest(priority,
- node.getRackName());
- if (rackLocalRequest != null && rackLocalRequest.getNumContainers() != 0
- && (allowedLocality.equals(NodeType.RACK_LOCAL) ||
- allowedLocality.equals(NodeType.OFF_SWITCH))) {
- return assignContainer(node, app, priority, rackLocalRequest,
- NodeType.RACK_LOCAL, reserved);
- }
-
- ResourceRequest offSwitchRequest = app.getResourceRequest(priority,
- RMNode.ANY);
- if (offSwitchRequest != null && offSwitchRequest.getNumContainers() != 0
- && allowedLocality.equals(NodeType.OFF_SWITCH)) {
- return assignContainer(node, app, priority, offSwitchRequest,
- NodeType.OFF_SWITCH, reserved);
+ synchronized (app) {
+ for (Priority priority : prioritiesToTry) {
+ app.addSchedulingOpportunity(priority);
+ NodeType allowedLocality = app.getAllowedLocalityLevel(priority,
+ scheduler.getNumClusterNodes(),
scheduler.getNodeLocalityThreshold(),
+ scheduler.getRackLocalityThreshold());
+
+ ResourceRequest localRequest = app.getResourceRequest(priority,
+ node.getHostName());
+ if (localRequest != null && localRequest.getNumContainers() != 0) {
+ return assignContainer(node, app, priority,
+ localRequest, NodeType.NODE_LOCAL, reserved);
+ }
+
+ ResourceRequest rackLocalRequest = app.getResourceRequest(priority,
+ node.getRackName());
+ if (rackLocalRequest != null && rackLocalRequest.getNumContainers() != 0
+ && (allowedLocality.equals(NodeType.RACK_LOCAL) ||
+ allowedLocality.equals(NodeType.OFF_SWITCH))) {
+ return assignContainer(node, app, priority, rackLocalRequest,
+ NodeType.RACK_LOCAL, reserved);
+ }
+
+ ResourceRequest offSwitchRequest = app.getResourceRequest(priority,
+ RMNode.ANY);
+ if (offSwitchRequest != null && offSwitchRequest.getNumContainers() != 0
+ && allowedLocality.equals(NodeType.OFF_SWITCH)) {
+ return assignContainer(node, app, priority, offSwitchRequest,
+ NodeType.OFF_SWITCH, reserved);
+ }
}
}
return Resources.none();
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java?rev=1428604&r1=1428603&r2=1428604&view=diff
==============================================================================
---
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java
(original)
+++
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java
Thu Jan 3 21:31:02 2013
@@ -99,20 +99,6 @@ public class FSParentQueue extends FSQue
}
}
- public boolean hasAccess(QueueACL acl, UserGroupInformation user) {
- synchronized (this) {
- if (getQueueAcls().get(acl).isUserAllowed(user)) {
- return true;
- }
- }
-
- if (parent != null) {
- return parent.hasAccess(acl, user);
- }
-
- return false;
- }
-
private synchronized QueueUserACLInfo getUserAclInfo(
UserGroupInformation user) {
QueueUserACLInfo userAclInfo =
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java?rev=1428604&r1=1428603&r2=1428604&view=diff
==============================================================================
---
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java
(original)
+++
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java
Thu Jan 3 21:31:02 2013
@@ -23,6 +23,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.authorize.AccessControlList;
import org.apache.hadoop.yarn.api.records.Priority;
import org.apache.hadoop.yarn.api.records.QueueACL;
@@ -118,6 +119,16 @@ public abstract class FSQueue extends Sc
return metrics;
}
+ public boolean hasAccess(QueueACL acl, UserGroupInformation user) {
+ // Check if the leaf-queue allows access
+ if (queueMgr.getQueueAcls(getName()).get(acl).isUserAllowed(user)) {
+ return true;
+ }
+
+ // Check if parent-queue allows access
+ return parent != null && parent.hasAccess(acl, user);
+ }
+
/**
* Recomputes the fair shares for all queues and applications
* under this queue.
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java?rev=1428604&r1=1428603&r2=1428604&view=diff
==============================================================================
---
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
(original)
+++
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
Thu Jan 3 21:31:02 2013
@@ -33,6 +33,7 @@ import org.apache.commons.logging.LogFac
import org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.security.AccessControlException;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.yarn.Clock;
import org.apache.hadoop.yarn.SystemClock;
@@ -494,24 +495,15 @@ public class FairScheduler implements Re
new FSSchedulerApp(applicationAttemptId, user,
queue, new ActiveUsersManager(getRootQueueMetrics()),
rmContext);
-
- // Enforce ACLs
- UserGroupInformation userUgi;
- try {
- userUgi = UserGroupInformation.getCurrentUser();
- } catch (IOException ioe) {
- LOG.info("Failed to get current user information");
- return;
- }
- // Always a singleton list
- List<QueueUserACLInfo> info = queue.getQueueUserAclInfo(userUgi);
- if (!info.get(0).getUserAcls().contains(QueueACL.SUBMIT_APPLICATIONS)) {
+ // Enforce ACLs
+ UserGroupInformation userUgi = UserGroupInformation.createRemoteUser(user);
+ if (!queue.hasAccess(QueueACL.SUBMIT_APPLICATIONS, userUgi)) {
LOG.info("User " + userUgi.getUserName() +
- " cannot submit" + " applications to queue " + queue.getName());
+ " cannot submit applications to queue " + queue.getName());
return;
}
-
+
queue.addApp(schedulerApp);
queue.getMetrics().submitApp(user, applicationAttemptId.getAttemptId());
@@ -768,7 +760,7 @@ public class FairScheduler implements Re
// Otherwise, schedule at queue which is furthest below fair share
else {
int assignedContainers = 0;
- while (true) {
+ while (node.getReservedContainer() == null) {
// At most one task is scheduled each iteration of this loop
List<FSLeafQueue> scheds = new ArrayList<FSLeafQueue>(
queueMgr.getLeafQueues());
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueueManager.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueueManager.java?rev=1428604&r1=1428603&r2=1428604&view=diff
==============================================================================
---
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueueManager.java
(original)
+++
hadoop/common/branches/branch-trunk-win/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueueManager.java
Thu Jan 3 21:31:02 2013
@@ -387,6 +387,16 @@ public class QueueManager {
queueMaxApps, userMaxApps, queueWeights, userMaxAppsDefault,
queueMaxAppsDefault, defaultSchedulingMode,
minSharePreemptionTimeouts,
queueAcls, fairSharePreemptionTimeout,
defaultMinSharePreemptionTimeout);
+
+ // Root queue should have empty ACLs. As a queue's ACL is the union of
+ // its ACL and all its parents' ACLs, setting the roots' to empty will
+ // neither allow nor prohibit more access to its children.
+ Map<QueueACL, AccessControlList> rootAcls =
+ new HashMap<QueueACL, AccessControlList>();
+ rootAcls.put(QueueACL.SUBMIT_APPLICATIONS, new AccessControlList(" "));
+ rootAcls.put(QueueACL.ADMINISTER_QUEUE, new AccessControlList(" "));
+ queueAcls.put(ROOT_QUEUE, rootAcls);
+
for (String name: queueNamesInAllocFile) {
FSLeafQueue queue = getLeafQueue(name);
if (queueModes.containsKey(name)) {
Modified:
hadoop/common/branches/branch-trunk-win/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
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/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?rev=1428604&r1=1428603&r2=1428604&view=diff
==============================================================================
---
hadoop/common/branches/branch-trunk-win/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
(original)
+++
hadoop/common/branches/branch-trunk-win/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
Thu Jan 3 21:31:02 2013
@@ -19,6 +19,8 @@
package org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
@@ -26,6 +28,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
@@ -53,6 +56,7 @@ import org.apache.hadoop.yarn.server.res
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
import org.apache.hadoop.yarn.server.resourcemanager.resource.Resources;
import
org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
+import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer;
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
import
org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
import
org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.AppAddedSchedulerEvent;
@@ -1187,4 +1191,88 @@ public class TestFairScheduler {
// Request should be fulfilled
assertEquals(2,
scheduler.applications.get(attId1).getLiveContainers().size());
}
+
+ @Test
+ public void testReservationWhileMultiplePriorities() {
+ // Add a node
+ RMNode node1 = MockNodes.newNodeInfo(1, Resources.createResource(1024));
+ NodeAddedSchedulerEvent nodeEvent1 = new NodeAddedSchedulerEvent(node1);
+ scheduler.handle(nodeEvent1);
+
+ ApplicationAttemptId attId = createSchedulingRequest(1024, "queue1",
+ "user1", 1, 2);
+ scheduler.update();
+ NodeUpdateSchedulerEvent updateEvent = new NodeUpdateSchedulerEvent(node1,
+ new ArrayList<ContainerStatus>(), new ArrayList<ContainerStatus>());
+ scheduler.handle(updateEvent);
+
+ FSSchedulerApp app = scheduler.applications.get(attId);
+ assertEquals(1, app.getLiveContainers().size());
+
+ ContainerId containerId = scheduler.applications.get(attId)
+ .getLiveContainers().iterator().next().getContainerId();
+
+ // Cause reservation to be created
+ createSchedulingRequestExistingApplication(1024, 2, attId);
+ scheduler.update();
+ scheduler.handle(updateEvent);
+
+ assertEquals(1, app.getLiveContainers().size());
+
+ // Create request at higher priority
+ createSchedulingRequestExistingApplication(1024, 1, attId);
+ scheduler.update();
+ scheduler.handle(updateEvent);
+
+ assertEquals(1, app.getLiveContainers().size());
+ // Reserved container should still be at lower priority
+ for (RMContainer container : app.getReservedContainers()) {
+ assertEquals(2, container.getReservedPriority().getPriority());
+ }
+
+ // Complete container
+ scheduler.allocate(attId, new ArrayList<ResourceRequest>(),
+ Arrays.asList(containerId));
+
+ // Schedule at opening
+ scheduler.update();
+ scheduler.handle(updateEvent);
+
+ // Reserved container (at lower priority) should be run
+ Collection<RMContainer> liveContainers = app.getLiveContainers();
+ assertEquals(1, liveContainers.size());
+ for (RMContainer liveContainer : liveContainers) {
+ Assert.assertEquals(2,
liveContainer.getContainer().getPriority().getPriority());
+ }
+ }
+
+ @Test
+ public void testAclSubmitApplication() throws Exception {
+ // Set acl's
+ Configuration conf = createConfiguration();
+ conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
+ scheduler.reinitialize(conf, resourceManager.getRMContext());
+
+ PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE));
+ out.println("<?xml version=\"1.0\"?>");
+ out.println("<allocations>");
+ out.println("<queue name=\"queue1\">");
+ out.println("<aclSubmitApps>norealuserhasthisname</aclSubmitApps>");
+ out.println("</queue>");
+ out.println("</allocations>");
+ out.close();
+
+ QueueManager queueManager = scheduler.getQueueManager();
+ queueManager.initialize();
+
+ ApplicationAttemptId attId1 = createSchedulingRequest(1024, "queue1",
+ "norealuserhasthisname", 1);
+ ApplicationAttemptId attId2 = createSchedulingRequest(1024, "queue1",
+ "norealuserhasthisname2", 1);
+
+ FSSchedulerApp app1 = scheduler.applications.get(attId1);
+ assertNotNull("The application was not allowed", app1);
+ FSSchedulerApp app2 = scheduler.applications.get(attId2);
+ assertNull("The application was allowed", app2);
+ }
}