[ 
https://issues.apache.org/jira/browse/YARN-10506?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17264616#comment-17264616
 ] 

zhuqi commented on YARN-10506:
------------------------------

[~wangda] [~gandras]

I have updated a patch according to [~wangda] comment, i think it's more 
reasonable in   

*1) How we deal with "create" flag of ApplicationPlacementContext?* 

1.autoCreateLeafQueue:

 
{code:java}
private LeafQueue autoCreateLeafQueue(
      ApplicationPlacementContext placementContext)
      throws IOException, YarnException {
    String leafQueueName = placementContext.getQueue();
    String parentQueueName = placementContext.getParentQueue();
    ApplicationPlacementContext apc =
        new ApplicationPlacementContext(placementContext);

    if (!StringUtils.isEmpty(parentQueueName)) {
      CSQueue parentQueue = getQueue(parentQueueName);
      CSQueue leafQueue = getQueue(leafQueueName);

      // Check if parent should not be null
      // when cant't auto create parent.
      if (parentQueue == null && !apc.isCreateParentQueue()) {
        throw new SchedulerDynamicEditException(
            "Could not auto-create leaf queue for " + leafQueueName
                + ". Queue mapping specifies an invalid parent queue "
                + "which does not exist or can't auto create" + 
parentQueueName);
      }

      if (parentQueue != null &&
          conf.isAutoCreateChildQueueEnabled(parentQueue.getQueuePath())) {
        // Case 1: Handle ManagedParentQueue
        AutoCreatedLeafQueue autoCreatedLeafQueue = null;
        ManagedParentQueue autoCreateEnabledParentQueue =
            (ManagedParentQueue) parentQueue;
        autoCreatedLeafQueue = new AutoCreatedLeafQueue(this, leafQueueName,
            autoCreateEnabledParentQueue);

        addQueue(autoCreatedLeafQueue);
        return autoCreatedLeafQueue;

      } else {
        // Now the parentQueue will not be null later in autoCreateQueue.
        // Because that: if parentQueue null, apc.isCreateParentQueue() is 
enabled.
        // Otherwise the parentQueue will not be null.
        // Just check the leafQueue will handle special case.
        if (!apc.isCreateLeafQueue()) {
          if (leafQueue != null && leafQueue instanceof LeafQueue) {
            return (LeafQueue) leafQueue;
          } else {
            throw new SchedulerDynamicEditException(
                "Could not auto-create leaf queue for " + leafQueueName
                    + "which auto create leaf not enabed. " +
                    "Meanwhile it does not exist or not a leaf queue.");
          }
        }

        // Now can create parent with leaf.
        // Other check will be in autoCreateQueue.
        return autoQueueHandler.autoCreateQueue(apc);
      }
    }

    throw new SchedulerDynamicEditException(
        "Could not auto-create leaf queue for " + leafQueueName
            + ". Queue mapping does not specify"
            + " which parent queue it needs to be created under.");
  }
}
{code}
I handle all the case, may some corner case i don't mind it.

 

I also fill the test cases in
{code:java}
@Test
public void testAutoQueueCreationOnAppSubmission() throws Exception {
  startScheduler();
  createBasicQueueStructureAndValidate();

  // Parent exists, allow create leaf will pass
  submitApp(cs, USER0, USER0, "root.e-auto", true, false);

  AbstractCSQueue e = (AbstractCSQueue) cs.getQueue("root.e-auto");
  Assert.assertNotNull(e);
  Assert.assertTrue(e.isDynamicQueue());

  AbstractCSQueue user0 = (AbstractCSQueue) cs.getQueue(
      "root.e-auto." + USER0);
  Assert.assertNotNull(user0);
  Assert.assertTrue(user0.isDynamicQueue());

  // Parent not exists (null), allow create parent and allow create leaf will 
pass
  submitApp(cs, USER1, USER1, "root.e-auto2", true, true);

  AbstractCSQueue e2 = (AbstractCSQueue) cs.getQueue("root.e-auto2");
  Assert.assertNotNull(e2);
  Assert.assertTrue(e2.isDynamicQueue());

  AbstractCSQueue user1 = (AbstractCSQueue) cs.getQueue(
      "root.e-auto2." + USER1);
  Assert.assertNotNull(user0);
  Assert.assertTrue(user1.isDynamicQueue());

  // Parent exists, don't allow create leaf, but leaf queue exists will pass
  submitApp(cs, USER0, USER0, "root.e-auto", false, false);

  Assert.assertNotNull(e);
  Assert.assertTrue(e.isDynamicQueue());

  Assert.assertNotNull(user0);
  Assert.assertTrue(user0.isDynamicQueue());

  // Parent not exists, don't allow create parent will not pass
  submitApp(cs, USER2, USER2, "root.e-auto3", true, false);
  // e3 will be null
  AbstractCSQueue e3 = (AbstractCSQueue) cs.getQueue("root.e-auto3");
  Assert.assertNull(e3);

  AbstractCSQueue user3 = (AbstractCSQueue) cs.getQueue(
      "root.e-auto3." + USER1);
  // user3 will be null
  Assert.assertNull(user3);
}
{code}
Add a submit with auto create leaf/parent flag in 
TestCapacitySchedulerAutoCreatedQueueBase.

 

Reg. *2) How we deal with the queue's auto-queue-creation configuration flag?*

*I have changed the related to queue-path.auto-queue-creation-v2.enabled.*

*If you any other advice for commit?*

 

> Update queue creation logic to use weight mode and allow the flexible 
> static/dynamic creation
> ---------------------------------------------------------------------------------------------
>
>                 Key: YARN-10506
>                 URL: https://issues.apache.org/jira/browse/YARN-10506
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>            Reporter: Benjamin Teke
>            Assignee: Andras Gyori
>            Priority: Major
>         Attachments: YARN-10506-006-10504-010.patch, 
> YARN-10506-007-10504-010.patch, YARN-10506-008.patch, YARN-10506-010.patch, 
> YARN-10506-012.patch, YARN-10506.001.patch, YARN-10506.002.patch, 
> YARN-10506.003.patch, YARN-10506.004.patch, YARN-10506.005.patch, 
> YARN-10506.006-combined.patch, YARN-10506.006.patch, YARN-10506.007.patch, 
> YARN-10506.009.patch, YARN-10506.011.patch
>
>
> The queue creation logic should be updated to use weight mode and support the 
> flexible creation. 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: yarn-issues-h...@hadoop.apache.org

Reply via email to