You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by su...@apache.org on 2017/12/05 12:58:43 UTC

hadoop git commit: YARN-7586. Application Placement should be done before ACL checks in ResourceManager. Contributed by Suma Shivaprasad.

Repository: hadoop
Updated Branches:
  refs/heads/trunk 9f1bdafed -> f9f317b70


YARN-7586. Application Placement should be done before ACL checks in ResourceManager. Contributed by Suma Shivaprasad.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/f9f317b7
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f9f317b7
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f9f317b7

Branch: refs/heads/trunk
Commit: f9f317b70209d20161d66a73ddea3334d2b92f96
Parents: 9f1bdaf
Author: Sunil G <su...@apache.org>
Authored: Tue Dec 5 18:28:31 2017 +0530
Committer: Sunil G <su...@apache.org>
Committed: Tue Dec 5 18:28:31 2017 +0530

----------------------------------------------------------------------
 .../server/resourcemanager/RMAppManager.java    |  60 +++++++++-
 .../placement/PlacementManager.java             |   5 +-
 .../server/resourcemanager/rmapp/RMApp.java     |   8 ++
 .../server/resourcemanager/rmapp/RMAppImpl.java |  80 +++-----------
 .../server/resourcemanager/TestAppManager.java  | 110 ++++++++++++++++---
 .../applicationsmanager/MockAsm.java            |   7 ++
 .../server/resourcemanager/rmapp/MockRMApp.java |   7 ++
 7 files changed, 194 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9f317b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.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/RMAppManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
index 5e82f40..3ad2c9a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
@@ -48,6 +48,10 @@ import org.apache.hadoop.yarn.ipc.RPCUtil;
 import org.apache.hadoop.yarn.security.AccessRequest;
 import org.apache.hadoop.yarn.security.YarnAuthorizationProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.RMAuditLogger.AuditConstants;
+
+import org.apache.hadoop.yarn.server.resourcemanager.placement
+    .ApplicationPlacementContext;
+import org.apache.hadoop.yarn.server.resourcemanager.placement.PlacementManager;
 import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore;
 import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore.RMState;
 import org.apache.hadoop.yarn.server.resourcemanager.recovery.Recoverable;
@@ -361,7 +365,24 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
       ApplicationSubmissionContext submissionContext, long submitTime,
       String user, boolean isRecovery, long startTime) throws YarnException {
 
+    ApplicationPlacementContext placementContext = null;
+
+    // We only do queue mapping when it's a new application
     if (!isRecovery) {
+      try {
+        // Do queue mapping
+        placementContext = placeApplication(rmContext,
+            submissionContext, user);
+        replaceQueueFromPlacementContext(placementContext,
+            submissionContext);
+      } catch (YarnException e) {
+        String msg = "Failed to place application " +
+            submissionContext.getApplicationId() + " to queue and specified "
+            + "queue is invalid : " + submissionContext.getQueue();
+        LOG.error(msg, e);
+        throw e;
+      }
+
       // fail the submission if configured application timeout value is invalid
       RMServerUtils.validateApplicationTimeouts(
           submissionContext.getApplicationTimeouts());
@@ -413,7 +434,8 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
             submissionContext.getQueue(),
             submissionContext, this.scheduler, this.masterService,
             submitTime, submissionContext.getApplicationType(),
-            submissionContext.getApplicationTags(), amReqs, startTime);
+            submissionContext.getApplicationTags(), amReqs, placementContext,
+            startTime);
     // Concurrent app submissions with same applicationId will fail here
     // Concurrent app submissions with different applicationIds will not
     // influence each other
@@ -758,4 +780,40 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
           + "' with below exception:" + ex.getMessage());
     }
   }
+
+  @VisibleForTesting
+  ApplicationPlacementContext placeApplication(RMContext rmContext,
+      ApplicationSubmissionContext context, String user) throws YarnException {
+    ApplicationPlacementContext placementContext = null;
+    PlacementManager placementManager = rmContext.getQueuePlacementManager();
+
+    if (placementManager != null) {
+      placementContext = placementManager.placeApplication(context, user);
+    } else{
+      if ( context.getQueue() == null || context.getQueue().isEmpty()) {
+        final String msg = "Queue Placement Manager is not set. Cannot place "
+            + "application : " + context.getApplicationId() + " to queue and "
+            + "specified queue is invalid " + context.getQueue();
+        LOG.error(msg);
+        throw new YarnException(msg);
+      }
+    }
+
+    return placementContext;
+  }
+
+  void replaceQueueFromPlacementContext(
+      ApplicationPlacementContext placementContext,
+      ApplicationSubmissionContext context) {
+    // Set it to ApplicationSubmissionContext
+    //apply queue mapping only to new application submissions
+    if (placementContext != null && !StringUtils.equalsIgnoreCase(
+        context.getQueue(), placementContext.getQueue())) {
+      LOG.info("Placed application=" + context.getApplicationId() +
+          " to queue=" + placementContext.getQueue() + ", original queue="
+          + context
+          .getQueue());
+      context.setQueue(placementContext.getQueue());
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9f317b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/PlacementManager.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/placement/PlacementManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/PlacementManager.java
index c006738..5fa7723 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/PlacementManager.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/PlacementManager.java
@@ -72,8 +72,9 @@ public class PlacementManager {
 
       // Failed to get where to place application
       if (null == placement && null == asc.getQueue()) {
-        String msg = "Failed to get where to place application=" + asc
-            .getApplicationId();
+        String msg = "Failed to place application " +
+            asc.getApplicationId() + " to queue and specified "
+            + "queue is invalid : " + asc.getQueue();
         LOG.error(msg);
         throw new YarnException(msg);
       }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9f317b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.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/rmapp/RMApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java
index 8583789..b357d91 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java
@@ -43,6 +43,8 @@ import org.apache.hadoop.yarn.api.records.YarnApplicationState;
 import org.apache.hadoop.yarn.event.EventHandler;
 import org.apache.hadoop.yarn.server.api.protocolrecords.LogAggregationReport;
 import org.apache.hadoop.yarn.server.api.records.AppCollectorData;
+import org.apache.hadoop.yarn.server.resourcemanager.placement
+    .ApplicationPlacementContext;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
 import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
 
@@ -303,4 +305,10 @@ public interface RMApp extends EventHandler<RMAppEvent> {
    * @return True/False to confirm whether app is in final states
    */
   boolean isAppInCompletedStates();
+
+  /**
+   * Get the application -> queue placement context
+   * @return ApplicationPlacementContext
+   */
+  ApplicationPlacementContext getApplicationPlacementContext();
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9f317b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.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/rmapp/RMAppImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
index 0266b83..38f666b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
@@ -67,7 +67,6 @@ import org.apache.hadoop.yarn.api.records.YarnApplicationState;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.event.Dispatcher;
 import org.apache.hadoop.yarn.event.EventHandler;
-import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
 import org.apache.hadoop.yarn.security.AMRMTokenIdentifier;
 import org.apache.hadoop.yarn.security.client.ClientToAMTokenIdentifier;
@@ -83,8 +82,9 @@ import org.apache.hadoop.yarn.server.resourcemanager.RMServerUtils;
 import org.apache.hadoop.yarn.server.resourcemanager.blacklist.BlacklistManager;
 import org.apache.hadoop.yarn.server.resourcemanager.blacklist.DisabledBlacklistManager;
 import org.apache.hadoop.yarn.server.resourcemanager.blacklist.SimpleBlacklistManager;
-import org.apache.hadoop.yarn.server.resourcemanager.placement.ApplicationPlacementContext;
-import org.apache.hadoop.yarn.server.resourcemanager.placement.PlacementManager;
+
+import org.apache.hadoop.yarn.server.resourcemanager.placement
+    .ApplicationPlacementContext;
 import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore.RMState;
 import org.apache.hadoop.yarn.server.resourcemanager.recovery.Recoverable;
 import org.apache.hadoop.yarn.server.resourcemanager.recovery.records.ApplicationStateData;
@@ -204,6 +204,8 @@ public class RMAppImpl implements RMApp, Recoverable {
   
   private CallerContext callerContext;
 
+  private ApplicationPlacementContext placementContext;
+
   Object transitionTodo;
 
   private Priority applicationPriority;
@@ -417,7 +419,7 @@ public class RMAppImpl implements RMApp, Recoverable {
       List<ResourceRequest> amReqs) {
     this(applicationId, rmContext, config, name, user, queue, submissionContext,
       scheduler, masterService, submitTime, applicationType, applicationTags,
-      amReqs, -1);
+      amReqs, null, -1);
   }
 
   public RMAppImpl(ApplicationId applicationId, RMContext rmContext,
@@ -425,7 +427,8 @@ public class RMAppImpl implements RMApp, Recoverable {
       ApplicationSubmissionContext submissionContext, YarnScheduler scheduler,
       ApplicationMasterService masterService, long submitTime,
       String applicationType, Set<String> applicationTags,
-      List<ResourceRequest> amReqs, long startTime) {
+      List<ResourceRequest> amReqs, ApplicationPlacementContext
+      placementContext, long startTime) {
 
     this.systemClock = SystemClock.getInstance();
 
@@ -484,6 +487,8 @@ public class RMAppImpl implements RMApp, Recoverable {
 
     this.callerContext = CallerContext.getCurrent();
 
+    this.placementContext = placementContext;
+
     long localLogAggregationStatusTimeout =
         conf.getLong(YarnConfiguration.LOG_AGGREGATION_STATUS_TIME_OUT_MS,
           YarnConfiguration.DEFAULT_LOG_AGGREGATION_STATUS_TIME_OUT_MS);
@@ -1098,22 +1103,12 @@ public class RMAppImpl implements RMApp, Recoverable {
         }
       }
 
-      ApplicationPlacementContext placementContext = null;
-      try {
-        placementContext = placeApplication(app.rmContext,
-            app.submissionContext, app.user);
-      } catch (Exception e) {
-        String msg = "Failed to place application to queue :" + e.getMessage();
-        app.diagnostics.append(msg);
-        LOG.error(msg, e);
-      }
-
       // No existent attempts means the attempt associated with this app was not
       // started or started but not yet saved.
       if (app.attempts.isEmpty()) {
         app.scheduler.handle(
             new AppAddedSchedulerEvent(app.user, app.submissionContext, false,
-                app.applicationPriority, placementContext));
+                app.applicationPriority, app.placementContext));
         return RMAppState.SUBMITTED;
       }
 
@@ -1121,7 +1116,7 @@ public class RMAppImpl implements RMApp, Recoverable {
       // knows applications before AM or NM re-registers.
       app.scheduler.handle(
           new AppAddedSchedulerEvent(app.user, app.submissionContext, true,
-              app.applicationPriority, placementContext));
+              app.applicationPriority, app.placementContext));
 
       // recover attempts
       app.recoverAppAttempts();
@@ -1137,20 +1132,9 @@ public class RMAppImpl implements RMApp, Recoverable {
       RMAppTransition {
     @Override
     public void transition(RMAppImpl app, RMAppEvent event) {
-      ApplicationPlacementContext placementContext = null;
-      try {
-        placementContext = placeApplication(app.rmContext,
-            app.submissionContext, app.user);
-        replaceQueueFromPlacementContext(placementContext,
-            app.submissionContext);
-      } catch (YarnException e) {
-        String msg = "Failed to place application to queue :" + e.getMessage();
-        app.diagnostics.append(msg);
-        LOG.error(msg, e);
-      }
       app.handler.handle(
           new AppAddedSchedulerEvent(app.user, app.submissionContext, false,
-              app.applicationPriority, placementContext));
+              app.applicationPriority, app.placementContext));
       // send the ATS create Event
       app.sendATSCreateEvent();
     }
@@ -1624,6 +1608,11 @@ public class RMAppImpl implements RMApp, Recoverable {
         || appState == RMAppState.KILLING;
   }
 
+  @Override
+  public ApplicationPlacementContext getApplicationPlacementContext() {
+    return placementContext;
+  }
+
   public RMAppState getRecoveredFinalState() {
     return this.recoveredFinalState;
   }
@@ -2046,37 +2035,4 @@ public class RMAppImpl implements RMApp, Recoverable {
     this.submissionContext.setAMContainerSpec(null);
     this.submissionContext.setLogAggregationContext(null);
   }
-
-  @VisibleForTesting
-  static ApplicationPlacementContext placeApplication(RMContext rmContext,
-      ApplicationSubmissionContext context, String user) throws YarnException {
-
-    ApplicationPlacementContext placementContext = null;
-    PlacementManager placementManager = rmContext.getQueuePlacementManager();
-
-    if (placementManager != null) {
-      placementContext = placementManager.placeApplication(context, user);
-    } else{
-      LOG.error(
-          "Queue Placement Manager is null. Cannot place application :" + " "
-              + context.getApplicationId() + " to queue ");
-    }
-
-    return placementContext;
-  }
-
-  static void replaceQueueFromPlacementContext(
-      ApplicationPlacementContext placementContext,
-      ApplicationSubmissionContext context) {
-    // Set it to ApplicationSubmissionContext
-    //apply queue mapping only to new application submissions
-    if (placementContext != null && !StringUtils.equals(context.getQueue(),
-        placementContext.getQueue())) {
-      LOG.info("Placed application=" + context.getApplicationId() + " to queue="
-          + placementContext.getQueue() + ", original queue=" + context
-          .getQueue());
-      context.setQueue(placementContext.getQueue());
-    }
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9f317b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
index 9445fa6..f56de0f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.yarn.server.resourcemanager;
 
 
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.isA;
@@ -84,6 +85,8 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptI
 import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.ContainerAllocationExpirer;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity
+    .CapacityScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.security.ClientToAMTokenSecretManagerInRM;
 import org.apache.hadoop.yarn.server.resourcemanager.timelineservice.RMTimelineCollectorManager;
 import org.apache.hadoop.yarn.server.security.ApplicationACLsManager;
@@ -108,7 +111,10 @@ import com.google.common.collect.Maps;
 
 public class TestAppManager{
   private Log LOG = LogFactory.getLog(TestAppManager.class);
-  private static RMAppEventType appEventType = RMAppEventType.KILL; 
+  private static RMAppEventType appEventType = RMAppEventType.KILL;
+
+  private static String USER = "user_";
+  private static String USER0 = USER + 0;
 
   public synchronized RMAppEventType getAppEventType() {
     return appEventType;
@@ -267,6 +273,70 @@ public class TestAppManager{
     setupDispatcher(rmContext, conf);
   }
 
+  @Test
+  public void testQueueSubmitWithACLsEnabledWithQueueMapping()
+      throws IOException, YarnException, InterruptedException {
+    YarnConfiguration conf = new YarnConfiguration();
+    conf.setClass(YarnConfiguration.RM_SCHEDULER, CapacityScheduler.class,
+        ResourceScheduler.class);
+    conf.set(PREFIX + "root.queues", "default,test");
+
+    conf.setFloat(PREFIX + "root.default.capacity", 50.0f);
+    conf.setFloat(PREFIX + "root.default.maximum-capacity", 100.0f);
+
+    conf.setFloat(PREFIX + "root.test.capacity", 50.0f);
+    conf.setFloat(PREFIX + "root.test.maximum-capacity", 100.0f);
+
+    conf.set(PREFIX + "root.acl_submit_applications", " ");
+    conf.set(PREFIX + "root.acl_administer_queue", " ");
+
+    conf.set(PREFIX + "root.default.acl_submit_applications", " ");
+    conf.set(PREFIX + "root.default.acl_administer_queue", " ");
+
+    conf.set(PREFIX + "root.test.acl_submit_applications", "test");
+    conf.set(PREFIX + "root.test.acl_administer_queue", "test");
+
+    conf.set(YarnConfiguration.YARN_ACL_ENABLE, "true");
+
+    // Setup a PlacementManager returns a new queue
+    PlacementManager placementMgr = mock(PlacementManager.class);
+    doAnswer(new Answer<ApplicationPlacementContext>() {
+
+      @Override
+      public ApplicationPlacementContext answer(InvocationOnMock invocation)
+          throws Throwable {
+        return new ApplicationPlacementContext("test");
+      }
+
+    }).when(placementMgr).placeApplication(
+        any(ApplicationSubmissionContext.class), any(String.class));
+
+    asContext.setQueue("oldQueue");
+
+    MockRM newMockRM = new MockRM(conf);
+    RMContext newMockRMContext = newMockRM.getRMContext();
+    newMockRMContext.setQueuePlacementManager(placementMgr);
+    ApplicationMasterService masterService =
+        new ApplicationMasterService(newMockRMContext,
+            newMockRMContext.getScheduler());
+
+    TestRMAppManager newAppMonitor = new TestRMAppManager(newMockRMContext,
+        new ClientToAMTokenSecretManagerInRM(),
+        newMockRMContext.getScheduler(), masterService,
+        new ApplicationACLsManager(conf), conf);
+
+    //only user test has permission to submit to 'test' queue
+    newAppMonitor.submitApplication(asContext, "test");
+
+    try {
+      //should fail since user does not have permission to submit to queue
+      // 'test'
+      newAppMonitor.submitApplication(asContext, "test1");
+    } catch(YarnException e) {
+      assertTrue(e.getCause() instanceof AccessControlException);
+    }
+  }
+
   @After
   public void tearDown() {
     setAppEventType(RMAppEventType.KILL);
@@ -328,7 +398,7 @@ public class TestAppManager{
     } catch (Exception e) {
       e.printStackTrace();
       if (e instanceof YarnException) {
-        Assert.assertTrue(e.getCause() instanceof AccessControlException);
+        assertTrue(e.getCause() instanceof AccessControlException);
       } else {
         Assert.fail("Yarn exception is expected : " + e.getMessage());
       }
@@ -718,7 +788,7 @@ public class TestAppManager{
           " Tokens are invalid.");
     } catch (YarnException e) {
       // Exception is expected
-      Assert.assertTrue("The thrown exception is not" +
+      assertTrue("The thrown exception is not" +
           " java.io.EOFException",
           e.getMessage().contains("java.io.EOFException"));
     }
@@ -778,22 +848,25 @@ public class TestAppManager{
     ApplicationId appId = MockApps.newAppID(0);
     asContext.setApplicationId(appId);
     RMApp appOrig = rmContext.getRMApps().get(appId);
-    Assert.assertTrue("app name matches but shouldn't", "testApp1" != appOrig.getName());
+    assertTrue("app name matches "
+        + "but shouldn't", "testApp1" != appOrig.getName());
 
     // our testApp1 should be rejected and original app with same id should be left in place
     try {
       appMonitor.submitApplication(asContext, "test");
       Assert.fail("Exception is expected when applicationId is duplicate.");
     } catch (YarnException e) {
-      Assert.assertTrue("The thrown exception is not the expectd one.",
+      assertTrue("The thrown exception is not the expectd one.",
           e.getMessage().contains("Cannot add a duplicate!"));
     }
 
     // make sure original app didn't get removed
     RMApp app = rmContext.getRMApps().get(appId);
     Assert.assertNotNull("app is null", app);
-    Assert.assertEquals("app id doesn't match", appId, app.getApplicationId());
-    Assert.assertEquals("app state doesn't match", RMAppState.FINISHED, app.getState());
+    Assert.assertEquals("app id doesn't match",
+        appId, app.getApplicationId());
+    Assert.assertEquals("app state doesn't match",
+        RMAppState.FINISHED, app.getState());
   }
 
   @SuppressWarnings("deprecation")
@@ -811,7 +884,7 @@ public class TestAppManager{
       // Exception is expected
       // TODO Change this to assert the expected exception type - post YARN-142
       // sub-task related to specialized exceptions.
-      Assert.assertTrue("The thrown exception is not" +
+      assertTrue("The thrown exception is not" +
           " InvalidResourceRequestException",
           e.getMessage().contains("Invalid resource request"));
     }
@@ -844,16 +917,16 @@ public class TestAppManager{
     Assert.assertFalse(msg.contains("\r"));
 
     String escaped = "\\n\\n\\r\\r";
-    Assert.assertTrue(msg.contains("Multiline" + escaped +"AppName"));
-    Assert.assertTrue(msg.contains("Multiline" + escaped +"UserName"));
-    Assert.assertTrue(msg.contains("Multiline" + escaped +"QueueName"));
-    Assert.assertTrue(msg.contains("submitTime=1000"));
-    Assert.assertTrue(msg.contains("memorySeconds=16384"));
-    Assert.assertTrue(msg.contains("vcoreSeconds=64"));
-    Assert.assertTrue(msg.contains("preemptedAMContainers=1"));
-    Assert.assertTrue(msg.contains("preemptedNonAMContainers=10"));
-    Assert.assertTrue(msg.contains("preemptedResources=<memory:1234\\, vCores:56>"));
-    Assert.assertTrue(msg.contains("applicationType=MAPREDUCE"));
+    assertTrue(msg.contains("Multiline" + escaped +"AppName"));
+    assertTrue(msg.contains("Multiline" + escaped +"UserName"));
+    assertTrue(msg.contains("Multiline" + escaped +"QueueName"));
+    assertTrue(msg.contains("submitTime=1000"));
+    assertTrue(msg.contains("memorySeconds=16384"));
+    assertTrue(msg.contains("vcoreSeconds=64"));
+    assertTrue(msg.contains("preemptedAMContainers=1"));
+    assertTrue(msg.contains("preemptedNonAMContainers=10"));
+    assertTrue(msg.contains("preemptedResources=<memory:1234\\, vCores:56>"));
+    assertTrue(msg.contains("applicationType=MAPREDUCE"));
  }
 
   @Test
@@ -952,4 +1025,5 @@ public class TestAppManager{
     }
     return cloneReqs;
   }
+
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9f317b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
index 9ef48db..2aca375 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
@@ -46,6 +46,8 @@ import org.apache.hadoop.yarn.api.records.YarnApplicationState;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.api.protocolrecords.LogAggregationReport;
 import org.apache.hadoop.yarn.server.api.records.AppCollectorData;
+import org.apache.hadoop.yarn.server.resourcemanager.placement
+    .ApplicationPlacementContext;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEvent;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppMetrics;
@@ -244,6 +246,11 @@ public abstract class MockAsm extends MockApps {
     }
 
     @Override
+    public ApplicationPlacementContext getApplicationPlacementContext() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
     public CollectorInfo getCollectorInfo() {
       throw new UnsupportedOperationException("Not supported yet.");
     }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9f317b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java
index 6c64a67..7567599 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java
@@ -45,6 +45,8 @@ import org.apache.hadoop.yarn.api.records.impl.pb.ApplicationSubmissionContextPB
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.api.protocolrecords.LogAggregationReport;
 import org.apache.hadoop.yarn.server.api.records.AppCollectorData;
+import org.apache.hadoop.yarn.server.resourcemanager.placement
+    .ApplicationPlacementContext;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
 import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
 
@@ -328,6 +330,11 @@ public class MockRMApp implements RMApp {
   }
 
   @Override
+  public ApplicationPlacementContext getApplicationPlacementContext() {
+    return null;
+  }
+
+  @Override
   public CollectorInfo getCollectorInfo() {
     throw new UnsupportedOperationException("Not supported yet.");
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org