Java Code Examples for org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerApp#updateResourceRequests()

The following examples show how to use org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerApp#updateResourceRequests() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: FifoScheduler.java    From hadoop with Apache License 2.0 4 votes vote down vote up
@Override
public Allocation allocate(
    ApplicationAttemptId applicationAttemptId, List<ResourceRequest> ask,
    List<ContainerId> release, List<String> blacklistAdditions, List<String> blacklistRemovals) {
  FiCaSchedulerApp application = getApplicationAttempt(applicationAttemptId);
  if (application == null) {
    LOG.error("Calling allocate on removed " +
        "or non existant application " + applicationAttemptId);
    return EMPTY_ALLOCATION;
  }

  // Sanity check
  SchedulerUtils.normalizeRequests(ask, resourceCalculator, 
      clusterResource, minimumAllocation, getMaximumResourceCapability());

  // Release containers
  releaseContainers(release, application);

  synchronized (application) {

    // make sure we aren't stopping/removing the application
    // when the allocate comes in
    if (application.isStopped()) {
      LOG.info("Calling allocate on a stopped " +
          "application " + applicationAttemptId);
      return EMPTY_ALLOCATION;
    }

    if (!ask.isEmpty()) {
      LOG.debug("allocate: pre-update" +
          " applicationId=" + applicationAttemptId + 
          " application=" + application);
      application.showRequests();

      // Update application requests
      application.updateResourceRequests(ask);

      LOG.debug("allocate: post-update" +
          " applicationId=" + applicationAttemptId + 
          " application=" + application);
      application.showRequests();

      LOG.debug("allocate:" +
          " applicationId=" + applicationAttemptId + 
          " #ask=" + ask.size());
    }

    application.updateBlacklist(blacklistAdditions, blacklistRemovals);
    ContainersAndNMTokensAllocation allocation =
        application.pullNewlyAllocatedContainersAndNMTokens();
    Resource headroom = application.getHeadroom();
    application.setApplicationHeadroomForMetrics(headroom);
    return new Allocation(allocation.getContainerList(), headroom, null,
        null, null, allocation.getNMTokenList());
  }
}
 
Example 2
Source File: CapacityScheduler.java    From hadoop with Apache License 2.0 4 votes vote down vote up
@Override
@Lock(Lock.NoLock.class)
public Allocation allocate(ApplicationAttemptId applicationAttemptId,
    List<ResourceRequest> ask, List<ContainerId> release, 
    List<String> blacklistAdditions, List<String> blacklistRemovals) {

  FiCaSchedulerApp application = getApplicationAttempt(applicationAttemptId);
  if (application == null) {
    LOG.info("Calling allocate on removed " +
        "or non existant application " + applicationAttemptId);
    return EMPTY_ALLOCATION;
  }
  
  // Sanity check
  SchedulerUtils.normalizeRequests(
      ask, getResourceCalculator(), getClusterResource(),
      getMinimumResourceCapability(), getMaximumResourceCapability());

  // Release containers
  releaseContainers(release, application);

  synchronized (application) {

    // make sure we aren't stopping/removing the application
    // when the allocate comes in
    if (application.isStopped()) {
      LOG.info("Calling allocate on a stopped " +
          "application " + applicationAttemptId);
      return EMPTY_ALLOCATION;
    }

    if (!ask.isEmpty()) {

      if(LOG.isDebugEnabled()) {
        LOG.debug("allocate: pre-update" +
          " applicationAttemptId=" + applicationAttemptId + 
          " application=" + application);
      }
      application.showRequests();

      // Update application requests
      application.updateResourceRequests(ask);

      LOG.debug("allocate: post-update");
      application.showRequests();
    }

    if(LOG.isDebugEnabled()) {
      LOG.debug("allocate:" +
        " applicationAttemptId=" + applicationAttemptId + 
        " #ask=" + ask.size());
    }

    application.updateBlacklist(blacklistAdditions, blacklistRemovals);

    return application.getAllocation(getResourceCalculator(),
                 clusterResource, getMinimumResourceCapability());
  }
}
 
Example 3
Source File: TestLeafQueue.java    From hadoop with Apache License 2.0 4 votes vote down vote up
@Test
public void testSingleQueueOneUserMetrics() throws Exception {

  // Manipulate queue 'a'
  LeafQueue a = stubLeafQueue((LeafQueue)queues.get(B));

  // Users
  final String user_0 = "user_0";

  // Submit applications
  final ApplicationAttemptId appAttemptId_0 = 
      TestUtils.getMockApplicationAttemptId(0, 0); 
  FiCaSchedulerApp app_0 = 
      new FiCaSchedulerApp(appAttemptId_0, user_0, a, 
          mock(ActiveUsersManager.class), spyRMContext);
  a.submitApplicationAttempt(app_0, user_0);

  final ApplicationAttemptId appAttemptId_1 = 
      TestUtils.getMockApplicationAttemptId(1, 0); 
  FiCaSchedulerApp app_1 = 
      new FiCaSchedulerApp(appAttemptId_1, user_0, a, 
          mock(ActiveUsersManager.class), spyRMContext);
  a.submitApplicationAttempt(app_1, user_0);  // same user

  
  // Setup some nodes
  String host_0 = "127.0.0.1";
  FiCaSchedulerNode node_0 = TestUtils.getMockNode(host_0, DEFAULT_RACK, 0,
      8*GB);

  final int numNodes = 1;
  Resource clusterResource = 
      Resources.createResource(numNodes * (8*GB), numNodes * 16);
  when(csContext.getNumClusterNodes()).thenReturn(numNodes);

  // Setup resource-requests
  Priority priority = TestUtils.createMockPriority(1);
  app_0.updateResourceRequests(Collections.singletonList(
          TestUtils.createResourceRequest(ResourceRequest.ANY, 1*GB, 3, true,
              priority, recordFactory)));

  // Start testing...
  
  // Only 1 container
  a.assignContainers(clusterResource, node_0, new ResourceLimits(
      clusterResource));
  assertEquals(
      (int)(node_0.getTotalResource().getMemory() * a.getCapacity()) - (1*GB),
      a.getMetrics().getAvailableMB());
}
 
Example 4
Source File: TestLeafQueue.java    From hadoop with Apache License 2.0 4 votes vote down vote up
@Test
  public void testUserLimits() throws Exception {
    // Mock the queue
    LeafQueue a = stubLeafQueue((LeafQueue)queues.get(A));
    //unset maxCapacity
    a.setMaxCapacity(1.0f);
    
    // Users
    final String user_0 = "user_0";
    final String user_1 = "user_1";

    // Submit applications
    final ApplicationAttemptId appAttemptId_0 = 
        TestUtils.getMockApplicationAttemptId(0, 0); 
    FiCaSchedulerApp app_0 = 
        new FiCaSchedulerApp(appAttemptId_0, user_0, a, 
            a.getActiveUsersManager(), spyRMContext);
    a.submitApplicationAttempt(app_0, user_0);

    final ApplicationAttemptId appAttemptId_1 = 
        TestUtils.getMockApplicationAttemptId(1, 0); 
    FiCaSchedulerApp app_1 = 
        new FiCaSchedulerApp(appAttemptId_1, user_0, a, 
            a.getActiveUsersManager(), spyRMContext);
    a.submitApplicationAttempt(app_1, user_0);  // same user

    final ApplicationAttemptId appAttemptId_2 = 
        TestUtils.getMockApplicationAttemptId(2, 0); 
    FiCaSchedulerApp app_2 = 
        new FiCaSchedulerApp(appAttemptId_2, user_1, a, 
            a.getActiveUsersManager(), spyRMContext);
    a.submitApplicationAttempt(app_2, user_1);

    // Setup some nodes
    String host_0 = "127.0.0.1";
    FiCaSchedulerNode node_0 = TestUtils.getMockNode(host_0, DEFAULT_RACK, 0, 8*GB);
    String host_1 = "127.0.0.2";
    FiCaSchedulerNode node_1 = TestUtils.getMockNode(host_1, DEFAULT_RACK, 0, 8*GB);
    
    final int numNodes = 2;
    Resource clusterResource = 
        Resources.createResource(numNodes * (8*GB), numNodes * 16);
    when(csContext.getNumClusterNodes()).thenReturn(numNodes);
 
    // Setup resource-requests
    Priority priority = TestUtils.createMockPriority(1);
    app_0.updateResourceRequests(Collections.singletonList(
            TestUtils.createResourceRequest(ResourceRequest.ANY, 2*GB, 1, true,
                priority, recordFactory)));

    app_1.updateResourceRequests(Collections.singletonList(
        TestUtils.createResourceRequest(ResourceRequest.ANY, 1*GB, 2, true,
            priority, recordFactory)));

    /**
     * Start testing...
     */
    
    // Set user-limit
    a.setUserLimit(50);
    a.setUserLimitFactor(2);
    
    // Now, only user_0 should be active since he is the only one with
    // outstanding requests
    assertEquals("There should only be 1 active user!", 
        1, a.getActiveUsersManager().getNumActiveUsers());

    // This commented code is key to test 'activeUsers'. 
    // It should fail the test if uncommented since
    // it would increase 'activeUsers' to 2 and stop user_2
    // Pre MAPREDUCE-3732 this test should fail without this block too
//    app_2.updateResourceRequests(Collections.singletonList(
//        TestUtils.createResourceRequest(RMNodeImpl.ANY, 1*GB, 1, priority,
//            recordFactory)));

    // 1 container to user_0
    a.assignContainers(clusterResource, node_0,
        new ResourceLimits(clusterResource));
    assertEquals(2*GB, a.getUsedResources().getMemory());
    assertEquals(2*GB, app_0.getCurrentConsumption().getMemory());
    assertEquals(0*GB, app_1.getCurrentConsumption().getMemory());

    // Again one to user_0 since he hasn't exceeded user limit yet
    a.assignContainers(clusterResource, node_0,
        new ResourceLimits(clusterResource));
    assertEquals(3*GB, a.getUsedResources().getMemory());
    assertEquals(2*GB, app_0.getCurrentConsumption().getMemory());
    assertEquals(1*GB, app_1.getCurrentConsumption().getMemory());

    // One more to user_0 since he is the only active user
    a.assignContainers(clusterResource, node_1,
        new ResourceLimits(clusterResource));
    assertEquals(4*GB, a.getUsedResources().getMemory());
    assertEquals(2*GB, app_0.getCurrentConsumption().getMemory());
    assertEquals(2*GB, app_1.getCurrentConsumption().getMemory());
  }
 
Example 5
Source File: TestLeafQueue.java    From hadoop with Apache License 2.0 4 votes vote down vote up
@Test
 public void testUserHeadroomMultiApp() throws Exception {
   // Mock the queue
   LeafQueue a = stubLeafQueue((LeafQueue)queues.get(A));
   //unset maxCapacity
   a.setMaxCapacity(1.0f);

   // Users
   final String user_0 = "user_0";
   final String user_1 = "user_1";

   // Submit applications
   final ApplicationAttemptId appAttemptId_0 =
       TestUtils.getMockApplicationAttemptId(0, 0);
   FiCaSchedulerApp app_0 =
       new FiCaSchedulerApp(appAttemptId_0, user_0, a,
           a.getActiveUsersManager(), spyRMContext);
   a.submitApplicationAttempt(app_0, user_0);

   final ApplicationAttemptId appAttemptId_1 =
       TestUtils.getMockApplicationAttemptId(1, 0);
   FiCaSchedulerApp app_1 =
       new FiCaSchedulerApp(appAttemptId_1, user_0, a,
           a.getActiveUsersManager(), spyRMContext);
   a.submitApplicationAttempt(app_1, user_0);  // same user

   final ApplicationAttemptId appAttemptId_2 =
       TestUtils.getMockApplicationAttemptId(2, 0);
   FiCaSchedulerApp app_2 =
       new FiCaSchedulerApp(appAttemptId_2, user_1, a,
           a.getActiveUsersManager(), spyRMContext);
   a.submitApplicationAttempt(app_2, user_1);

   // Setup some nodes
   String host_0 = "127.0.0.1";
   FiCaSchedulerNode node_0 = TestUtils.getMockNode(host_0, DEFAULT_RACK, 
     0, 16*GB);
   String host_1 = "127.0.0.2";
   FiCaSchedulerNode node_1 = TestUtils.getMockNode(host_1, DEFAULT_RACK, 
     0, 16*GB);

   final int numNodes = 2;
   Resource clusterResource = Resources.createResource(numNodes * (16*GB), 1);
   when(csContext.getNumClusterNodes()).thenReturn(numNodes);

   Priority priority = TestUtils.createMockPriority(1);

   app_0.updateResourceRequests(Collections.singletonList(
           TestUtils.createResourceRequest(ResourceRequest.ANY, 1*GB, 1, true,
               priority, recordFactory)));

   a.assignContainers(clusterResource, node_0,
       new ResourceLimits(clusterResource));
   assertEquals(1*GB, a.getUsedResources().getMemory());
   assertEquals(1*GB, app_0.getCurrentConsumption().getMemory());
   assertEquals(0*GB, app_1.getCurrentConsumption().getMemory());
   //Now, headroom is the same for all apps for a given user + queue combo
   //and a change to any app's headroom is reflected for all the user's apps
   //once those apps are active/have themselves calculated headroom for 
   //allocation at least one time
   assertEquals(2*GB, app_0.getHeadroom().getMemory());
   assertEquals(0*GB, app_1.getHeadroom().getMemory());//not yet active
   assertEquals(0*GB, app_2.getHeadroom().getMemory());//not yet active

   app_1.updateResourceRequests(Collections.singletonList(
       TestUtils.createResourceRequest(ResourceRequest.ANY, 1*GB, 2, true,
           priority, recordFactory)));

   a.assignContainers(clusterResource, node_0,
       new ResourceLimits(clusterResource));
   assertEquals(2*GB, a.getUsedResources().getMemory());
   assertEquals(1*GB, app_0.getCurrentConsumption().getMemory());
   assertEquals(1*GB, app_1.getCurrentConsumption().getMemory());
   assertEquals(1*GB, app_0.getHeadroom().getMemory());
   assertEquals(1*GB, app_1.getHeadroom().getMemory());//now active
   assertEquals(0*GB, app_2.getHeadroom().getMemory());//not yet active

   //Complete container and verify that headroom is updated, for both apps 
   //for the user
   RMContainer rmContainer = app_0.getLiveContainers().iterator().next();
   a.completedContainer(clusterResource, app_0, node_0, rmContainer,
   ContainerStatus.newInstance(rmContainer.getContainerId(),
ContainerState.COMPLETE, "",
ContainerExitStatus.KILLED_BY_RESOURCEMANAGER),
   RMContainerEventType.KILL, null, true);

   assertEquals(2*GB, app_0.getHeadroom().getMemory());
   assertEquals(2*GB, app_1.getHeadroom().getMemory());
 }
 
Example 6
Source File: TestLeafQueue.java    From hadoop with Apache License 2.0 4 votes vote down vote up
@Test
public void testAllocateContainerOnNodeWithoutOffSwitchSpecified()
    throws Exception {
  // Manipulate queue 'a'
  LeafQueue a = stubLeafQueue((LeafQueue) queues.get(B));

  // Users
  final String user_0 = "user_0";

  // Submit applications
  final ApplicationAttemptId appAttemptId_0 =
      TestUtils.getMockApplicationAttemptId(0, 0);
  FiCaSchedulerApp app_0 =
      new FiCaSchedulerApp(appAttemptId_0, user_0, a,
          mock(ActiveUsersManager.class), spyRMContext);
  a.submitApplicationAttempt(app_0, user_0);

  final ApplicationAttemptId appAttemptId_1 =
      TestUtils.getMockApplicationAttemptId(1, 0);
  FiCaSchedulerApp app_1 =
      new FiCaSchedulerApp(appAttemptId_1, user_0, a,
          mock(ActiveUsersManager.class), spyRMContext);
  a.submitApplicationAttempt(app_1, user_0); // same user

  // Setup some nodes
  String host_0 = "127.0.0.1";
  FiCaSchedulerNode node_0 =
      TestUtils.getMockNode(host_0, DEFAULT_RACK, 0, 8 * GB);

  final int numNodes = 1;
  Resource clusterResource =
      Resources.createResource(numNodes * (8 * GB), numNodes * 16);
  when(csContext.getNumClusterNodes()).thenReturn(numNodes);

  // Setup resource-requests
  Priority priority = TestUtils.createMockPriority(1);
  app_0.updateResourceRequests(Arrays.asList(TestUtils.createResourceRequest(
      "127.0.0.1", 1 * GB, 3, true, priority, recordFactory), TestUtils
      .createResourceRequest(DEFAULT_RACK, 1 * GB, 3, true, priority,
          recordFactory)));

  try {
    a.assignContainers(clusterResource, node_0, 
        new ResourceLimits(clusterResource));
  } catch (NullPointerException e) {
    Assert.fail("NPE when allocating container on node but "
        + "forget to set off-switch request should be handled");
  }
}
 
Example 7
Source File: FifoScheduler.java    From big-c with Apache License 2.0 4 votes vote down vote up
@Override
public Allocation allocate(
    ApplicationAttemptId applicationAttemptId, List<ResourceRequest> ask,
    List<ContainerId> release, List<String> blacklistAdditions, List<String> blacklistRemovals) {
  FiCaSchedulerApp application = getApplicationAttempt(applicationAttemptId);
  if (application == null) {
    LOG.error("Calling allocate on removed " +
        "or non existant application " + applicationAttemptId);
    return EMPTY_ALLOCATION;
  }

  // Sanity check
  SchedulerUtils.normalizeRequests(ask, resourceCalculator, 
      clusterResource, minimumAllocation, getMaximumResourceCapability());

  // Release containers
  releaseContainers(release, application);

  synchronized (application) {

    // make sure we aren't stopping/removing the application
    // when the allocate comes in
    if (application.isStopped()) {
      LOG.info("Calling allocate on a stopped " +
          "application " + applicationAttemptId);
      return EMPTY_ALLOCATION;
    }

    if (!ask.isEmpty()) {
      LOG.debug("allocate: pre-update" +
          " applicationId=" + applicationAttemptId + 
          " application=" + application);
      application.showRequests();

      // Update application requests
      application.updateResourceRequests(ask);

      LOG.debug("allocate: post-update" +
          " applicationId=" + applicationAttemptId + 
          " application=" + application);
      application.showRequests();

      LOG.debug("allocate:" +
          " applicationId=" + applicationAttemptId + 
          " #ask=" + ask.size());
    }

    application.updateBlacklist(blacklistAdditions, blacklistRemovals);
    ContainersAndNMTokensAllocation allocation =
        application.pullNewlyAllocatedContainersAndNMTokens();
    Resource headroom = application.getHeadroom();
    application.setApplicationHeadroomForMetrics(headroom);
    return new Allocation(allocation.getContainerList(), headroom, null,
        null, null, allocation.getNMTokenList());
  }
}
 
Example 8
Source File: CapacityScheduler.java    From big-c with Apache License 2.0 4 votes vote down vote up
@Override
@Lock(Lock.NoLock.class)
public Allocation allocate(ApplicationAttemptId applicationAttemptId,
    List<ResourceRequest> ask, List<ContainerId> release, 
    List<String> blacklistAdditions, List<String> blacklistRemovals) {

  FiCaSchedulerApp application = getApplicationAttempt(applicationAttemptId);
  if (application == null) {
    LOG.info("Calling allocate on removed " +
        "or non existant application " + applicationAttemptId);
    return EMPTY_ALLOCATION;
  }
  
  // Sanity check
  SchedulerUtils.normalizeRequests(
      ask, getResourceCalculator(), getClusterResource(),
      getMinimumResourceCapability(), getMaximumResourceCapability());

  // Release containers
 
  releaseContainers(release, application);

  synchronized (application) {

    // make sure we aren't stopping/removing the application
    // when the allocate comes in
    if (application.isStopped()) {
      LOG.info("Calling allocate on a stopped " +
          "application " + applicationAttemptId);
      return EMPTY_ALLOCATION;
    }

    if (!ask.isEmpty()) {

      if(LOG.isDebugEnabled()) {
        LOG.debug("allocate: pre-update" +
          " applicationAttemptId=" + applicationAttemptId + 
          " application=" + application);
      }
      application.showRequests();

      // Update application requests
      application.updateResourceRequests(ask);

      LOG.debug("allocate: post-update");
      application.showRequests();
    }

    if(LOG.isDebugEnabled()) {
      LOG.debug("allocate:" +
        " applicationAttemptId=" + applicationAttemptId + 
        " #ask=" + ask.size());
    }

    application.updateBlacklist(blacklistAdditions, blacklistRemovals);

    return application.getAllocation(getResourceCalculator(),
                 clusterResource, getMinimumResourceCapability());
  }
}
 
Example 9
Source File: TestLeafQueue.java    From big-c with Apache License 2.0 4 votes vote down vote up
@Test
public void testSingleQueueOneUserMetrics() throws Exception {

  // Manipulate queue 'a'
  LeafQueue a = stubLeafQueue((LeafQueue)queues.get(B));

  // Users
  final String user_0 = "user_0";

  // Submit applications
  final ApplicationAttemptId appAttemptId_0 = 
      TestUtils.getMockApplicationAttemptId(0, 0); 
  FiCaSchedulerApp app_0 = 
      new FiCaSchedulerApp(appAttemptId_0, user_0, a, 
          mock(ActiveUsersManager.class), spyRMContext);
  a.submitApplicationAttempt(app_0, user_0);

  final ApplicationAttemptId appAttemptId_1 = 
      TestUtils.getMockApplicationAttemptId(1, 0); 
  FiCaSchedulerApp app_1 = 
      new FiCaSchedulerApp(appAttemptId_1, user_0, a, 
          mock(ActiveUsersManager.class), spyRMContext);
  a.submitApplicationAttempt(app_1, user_0);  // same user

  
  // Setup some nodes
  String host_0 = "127.0.0.1";
  FiCaSchedulerNode node_0 = TestUtils.getMockNode(host_0, DEFAULT_RACK, 0,
      8*GB);

  final int numNodes = 1;
  Resource clusterResource = 
      Resources.createResource(numNodes * (8*GB), numNodes * 16);
  when(csContext.getNumClusterNodes()).thenReturn(numNodes);

  // Setup resource-requests
  Priority priority = TestUtils.createMockPriority(1);
  app_0.updateResourceRequests(Collections.singletonList(
          TestUtils.createResourceRequest(ResourceRequest.ANY, 1*GB, 3, true,
              priority, recordFactory)));

  // Start testing...
  
  // Only 1 container
  a.assignContainers(clusterResource, node_0, new ResourceLimits(
      clusterResource));
  assertEquals(
      (int)(node_0.getTotalResource().getMemory() * a.getCapacity()) - (1*GB),
      a.getMetrics().getAvailableMB());
}
 
Example 10
Source File: TestLeafQueue.java    From big-c with Apache License 2.0 4 votes vote down vote up
@Test
  public void testUserLimits() throws Exception {
    // Mock the queue
    LeafQueue a = stubLeafQueue((LeafQueue)queues.get(A));
    //unset maxCapacity
    a.setMaxCapacity(1.0f);
    
    // Users
    final String user_0 = "user_0";
    final String user_1 = "user_1";

    // Submit applications
    final ApplicationAttemptId appAttemptId_0 = 
        TestUtils.getMockApplicationAttemptId(0, 0); 
    FiCaSchedulerApp app_0 = 
        new FiCaSchedulerApp(appAttemptId_0, user_0, a, 
            a.getActiveUsersManager(), spyRMContext);
    a.submitApplicationAttempt(app_0, user_0);

    final ApplicationAttemptId appAttemptId_1 = 
        TestUtils.getMockApplicationAttemptId(1, 0); 
    FiCaSchedulerApp app_1 = 
        new FiCaSchedulerApp(appAttemptId_1, user_0, a, 
            a.getActiveUsersManager(), spyRMContext);
    a.submitApplicationAttempt(app_1, user_0);  // same user

    final ApplicationAttemptId appAttemptId_2 = 
        TestUtils.getMockApplicationAttemptId(2, 0); 
    FiCaSchedulerApp app_2 = 
        new FiCaSchedulerApp(appAttemptId_2, user_1, a, 
            a.getActiveUsersManager(), spyRMContext);
    a.submitApplicationAttempt(app_2, user_1);

    // Setup some nodes
    String host_0 = "127.0.0.1";
    FiCaSchedulerNode node_0 = TestUtils.getMockNode(host_0, DEFAULT_RACK, 0, 8*GB);
    String host_1 = "127.0.0.2";
    FiCaSchedulerNode node_1 = TestUtils.getMockNode(host_1, DEFAULT_RACK, 0, 8*GB);
    
    final int numNodes = 2;
    Resource clusterResource = 
        Resources.createResource(numNodes * (8*GB), numNodes * 16);
    when(csContext.getNumClusterNodes()).thenReturn(numNodes);
 
    // Setup resource-requests
    Priority priority = TestUtils.createMockPriority(1);
    app_0.updateResourceRequests(Collections.singletonList(
            TestUtils.createResourceRequest(ResourceRequest.ANY, 2*GB, 1, true,
                priority, recordFactory)));

    app_1.updateResourceRequests(Collections.singletonList(
        TestUtils.createResourceRequest(ResourceRequest.ANY, 1*GB, 2, true,
            priority, recordFactory)));

    /**
     * Start testing...
     */
    
    // Set user-limit
    a.setUserLimit(50);
    a.setUserLimitFactor(2);
    
    // Now, only user_0 should be active since he is the only one with
    // outstanding requests
    assertEquals("There should only be 1 active user!", 
        1, a.getActiveUsersManager().getNumActiveUsers());

    // This commented code is key to test 'activeUsers'. 
    // It should fail the test if uncommented since
    // it would increase 'activeUsers' to 2 and stop user_2
    // Pre MAPREDUCE-3732 this test should fail without this block too
//    app_2.updateResourceRequests(Collections.singletonList(
//        TestUtils.createResourceRequest(RMNodeImpl.ANY, 1*GB, 1, priority,
//            recordFactory)));

    // 1 container to user_0
    a.assignContainers(clusterResource, node_0,
        new ResourceLimits(clusterResource));
    assertEquals(2*GB, a.getUsedResources().getMemory());
    assertEquals(2*GB, app_0.getCurrentConsumption().getMemory());
    assertEquals(0*GB, app_1.getCurrentConsumption().getMemory());

    // Again one to user_0 since he hasn't exceeded user limit yet
    a.assignContainers(clusterResource, node_0,
        new ResourceLimits(clusterResource));
    assertEquals(3*GB, a.getUsedResources().getMemory());
    assertEquals(2*GB, app_0.getCurrentConsumption().getMemory());
    assertEquals(1*GB, app_1.getCurrentConsumption().getMemory());

    // One more to user_0 since he is the only active user
    a.assignContainers(clusterResource, node_1,
        new ResourceLimits(clusterResource));
    assertEquals(4*GB, a.getUsedResources().getMemory());
    assertEquals(2*GB, app_0.getCurrentConsumption().getMemory());
    assertEquals(2*GB, app_1.getCurrentConsumption().getMemory());
  }
 
Example 11
Source File: TestLeafQueue.java    From big-c with Apache License 2.0 4 votes vote down vote up
@Test
 public void testUserHeadroomMultiApp() throws Exception {
   // Mock the queue
   LeafQueue a = stubLeafQueue((LeafQueue)queues.get(A));
   //unset maxCapacity
   a.setMaxCapacity(1.0f);

   // Users
   final String user_0 = "user_0";
   final String user_1 = "user_1";

   // Submit applications
   final ApplicationAttemptId appAttemptId_0 =
       TestUtils.getMockApplicationAttemptId(0, 0);
   FiCaSchedulerApp app_0 =
       new FiCaSchedulerApp(appAttemptId_0, user_0, a,
           a.getActiveUsersManager(), spyRMContext);
   a.submitApplicationAttempt(app_0, user_0);

   final ApplicationAttemptId appAttemptId_1 =
       TestUtils.getMockApplicationAttemptId(1, 0);
   FiCaSchedulerApp app_1 =
       new FiCaSchedulerApp(appAttemptId_1, user_0, a,
           a.getActiveUsersManager(), spyRMContext);
   a.submitApplicationAttempt(app_1, user_0);  // same user

   final ApplicationAttemptId appAttemptId_2 =
       TestUtils.getMockApplicationAttemptId(2, 0);
   FiCaSchedulerApp app_2 =
       new FiCaSchedulerApp(appAttemptId_2, user_1, a,
           a.getActiveUsersManager(), spyRMContext);
   a.submitApplicationAttempt(app_2, user_1);

   // Setup some nodes
   String host_0 = "127.0.0.1";
   FiCaSchedulerNode node_0 = TestUtils.getMockNode(host_0, DEFAULT_RACK, 
     0, 16*GB);
   String host_1 = "127.0.0.2";
   FiCaSchedulerNode node_1 = TestUtils.getMockNode(host_1, DEFAULT_RACK, 
     0, 16*GB);

   final int numNodes = 2;
   Resource clusterResource = Resources.createResource(numNodes * (16*GB), 1);
   when(csContext.getNumClusterNodes()).thenReturn(numNodes);

   Priority priority = TestUtils.createMockPriority(1);

   app_0.updateResourceRequests(Collections.singletonList(
           TestUtils.createResourceRequest(ResourceRequest.ANY, 1*GB, 1, true,
               priority, recordFactory)));

   a.assignContainers(clusterResource, node_0,
       new ResourceLimits(clusterResource));
   assertEquals(1*GB, a.getUsedResources().getMemory());
   assertEquals(1*GB, app_0.getCurrentConsumption().getMemory());
   assertEquals(0*GB, app_1.getCurrentConsumption().getMemory());
   //Now, headroom is the same for all apps for a given user + queue combo
   //and a change to any app's headroom is reflected for all the user's apps
   //once those apps are active/have themselves calculated headroom for 
   //allocation at least one time
   assertEquals(2*GB, app_0.getHeadroom().getMemory());
   assertEquals(0*GB, app_1.getHeadroom().getMemory());//not yet active
   assertEquals(0*GB, app_2.getHeadroom().getMemory());//not yet active

   app_1.updateResourceRequests(Collections.singletonList(
       TestUtils.createResourceRequest(ResourceRequest.ANY, 1*GB, 2, true,
           priority, recordFactory)));

   a.assignContainers(clusterResource, node_0,
       new ResourceLimits(clusterResource));
   assertEquals(2*GB, a.getUsedResources().getMemory());
   assertEquals(1*GB, app_0.getCurrentConsumption().getMemory());
   assertEquals(1*GB, app_1.getCurrentConsumption().getMemory());
   assertEquals(1*GB, app_0.getHeadroom().getMemory());
   assertEquals(1*GB, app_1.getHeadroom().getMemory());//now active
   assertEquals(0*GB, app_2.getHeadroom().getMemory());//not yet active

   //Complete container and verify that headroom is updated, for both apps 
   //for the user
   RMContainer rmContainer = app_0.getLiveContainers().iterator().next();
   a.completedContainer(clusterResource, app_0, node_0, rmContainer,
   ContainerStatus.newInstance(rmContainer.getContainerId(),
ContainerState.COMPLETE, "",
ContainerExitStatus.KILLED_BY_RESOURCEMANAGER),
   RMContainerEventType.KILL, null, true);

   assertEquals(2*GB, app_0.getHeadroom().getMemory());
   assertEquals(2*GB, app_1.getHeadroom().getMemory());
 }
 
Example 12
Source File: TestLeafQueue.java    From big-c with Apache License 2.0 4 votes vote down vote up
@Test
public void testAllocateContainerOnNodeWithoutOffSwitchSpecified()
    throws Exception {
  // Manipulate queue 'a'
  LeafQueue a = stubLeafQueue((LeafQueue) queues.get(B));

  // Users
  final String user_0 = "user_0";

  // Submit applications
  final ApplicationAttemptId appAttemptId_0 =
      TestUtils.getMockApplicationAttemptId(0, 0);
  FiCaSchedulerApp app_0 =
      new FiCaSchedulerApp(appAttemptId_0, user_0, a,
          mock(ActiveUsersManager.class), spyRMContext);
  a.submitApplicationAttempt(app_0, user_0);

  final ApplicationAttemptId appAttemptId_1 =
      TestUtils.getMockApplicationAttemptId(1, 0);
  FiCaSchedulerApp app_1 =
      new FiCaSchedulerApp(appAttemptId_1, user_0, a,
          mock(ActiveUsersManager.class), spyRMContext);
  a.submitApplicationAttempt(app_1, user_0); // same user

  // Setup some nodes
  String host_0 = "127.0.0.1";
  FiCaSchedulerNode node_0 =
      TestUtils.getMockNode(host_0, DEFAULT_RACK, 0, 8 * GB);

  final int numNodes = 1;
  Resource clusterResource =
      Resources.createResource(numNodes * (8 * GB), numNodes * 16);
  when(csContext.getNumClusterNodes()).thenReturn(numNodes);

  // Setup resource-requests
  Priority priority = TestUtils.createMockPriority(1);
  app_0.updateResourceRequests(Arrays.asList(TestUtils.createResourceRequest(
      "127.0.0.1", 1 * GB, 3, true, priority, recordFactory), TestUtils
      .createResourceRequest(DEFAULT_RACK, 1 * GB, 3, true, priority,
          recordFactory)));

  try {
    a.assignContainers(clusterResource, node_0, 
        new ResourceLimits(clusterResource));
  } catch (NullPointerException e) {
    Assert.fail("NPE when allocating container on node but "
        + "forget to set off-switch request should be handled");
  }
}