You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-issues@hadoop.apache.org by "Peter Bacsko (Jira)" <ji...@apache.org> on 2019/08/28 11:21:00 UTC

[jira] [Comment Edited] (YARN-9290) Invalid SchedulingRequest not rejected in Scheduler PlacementConstraintsHandler

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

Peter Bacsko edited comment on YARN-9290 at 8/28/19 11:20 AM:
--------------------------------------------------------------

Some minor comments:

{code}
	  public List<RejectedSchedulingRequest> getRejectedRequest() {
	    List<RejectedSchedulingRequest> ret = new ArrayList<>();
	    try {
	      this.readLock.lock();
	      schedulerKeyToAppPlacementAllocator.values().stream()
	          .filter(ap -> ap.getPlacementAttempt() >= retryAttempts)
	          .forEach(ap -> ret.add(RejectedSchedulingRequest.newInstance(
	          RejectionReason.COULD_NOT_SCHEDULE_ON_NODE,
	          ap.getSchedulingRequest())));
	    } finally {
	      this.readLock.unlock();
	    }
	    return ret;
	  }
{code}

1. Acquire the lock outside the try-catch block
2. Instead of {{forEach}} and filling the list, you could you use {{.collect(Collectors.toList())}}



{code}
	  public int getPlacementAttempt() {
	    return placementAttempt;
	  }
	
	  public void incrementPlacementAttempt() {
	    placementAttempt++;
	  }
{code}

Shouldn't this piece of code be protected with locks? Subclass like {{SingleConstraintAppPlacementAllocator}} uses read/write locks for such modifications. 


was (Author: pbacsko):
Some minor comments:

{code}
	  public List<RejectedSchedulingRequest> getRejectedRequest() {
	    List<RejectedSchedulingRequest> ret = new ArrayList<>();
	    try {
	      this.readLock.lock();
	      schedulerKeyToAppPlacementAllocator.values().stream()
	          .filter(ap -> ap.getPlacementAttempt() >= retryAttempts)
	          .forEach(ap -> ret.add(RejectedSchedulingRequest.newInstance(
	          RejectionReason.COULD_NOT_SCHEDULE_ON_NODE,
	          ap.getSchedulingRequest())));
	    } finally {
	      this.readLock.unlock();
	    }
	    return ret;
	  }
{code}

1. Acquire the lock outside the try-catch block
2. Instead of {{forEach}} and filling the list, you could you use {{.collect(Collectors.toList)}}

{code}
	  public int getPlacementAttempt() {
	    return placementAttempt;
	  }
	
	  public void incrementPlacementAttempt() {
	    placementAttempt++;
	  }
{code}

Shouldn't this piece of code be protected with locks? Subclass like {{SingleConstraintAppPlacementAllocator}} uses read/write locks for such modifications. 

> Invalid SchedulingRequest not rejected in Scheduler PlacementConstraintsHandler 
> --------------------------------------------------------------------------------
>
>                 Key: YARN-9290
>                 URL: https://issues.apache.org/jira/browse/YARN-9290
>             Project: Hadoop YARN
>          Issue Type: Bug
>    Affects Versions: 3.2.0
>            Reporter: Prabhu Joseph
>            Assignee: Prabhu Joseph
>            Priority: Major
>         Attachments: YARN-9290-001.patch, YARN-9290-002.patch, YARN-9290-003.patch, YARN-9290-004.patch, YARN-9290-005.patch, YARN-9290-006.patch
>
>
> SchedulingRequest with Invalid namespace is not rejected in Scheduler  PlacementConstraintsHandler. RM keeps on trying to allocateOnNode with logging the exception. This is rejected in case of placement-processor handler.
> {code}
> 2019-02-08 16:51:27,548 WARN org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.SingleConstraintAppPlacementAllocator: Failed to query node cardinality:
> org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.InvalidAllocationTagsQueryException: Invalid namespace prefix: notselfi, valid values are: all,not-self,app-id,app-tag,self
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.TargetApplicationsNamespace.fromString(TargetApplicationsNamespace.java:277)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.TargetApplicationsNamespace.parse(TargetApplicationsNamespace.java:234)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.AllocationTags.createAllocationTags(AllocationTags.java:93)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.PlacementConstraintsUtil.canSatisfySingleConstraintExpression(PlacementConstraintsUtil.java:78)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.PlacementConstraintsUtil.canSatisfySingleConstraint(PlacementConstraintsUtil.java:240)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.PlacementConstraintsUtil.canSatisfyConstraints(PlacementConstraintsUtil.java:321)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.PlacementConstraintsUtil.canSatisfyAndConstraint(PlacementConstraintsUtil.java:272)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.PlacementConstraintsUtil.canSatisfyConstraints(PlacementConstraintsUtil.java:324)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.PlacementConstraintsUtil.canSatisfyConstraints(PlacementConstraintsUtil.java:365)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.SingleConstraintAppPlacementAllocator.checkCardinalityAndPending(SingleConstraintAppPlacementAllocator.java:355)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.SingleConstraintAppPlacementAllocator.precheckNode(SingleConstraintAppPlacementAllocator.java:395)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.AppSchedulingInfo.precheckNode(AppSchedulingInfo.java:779)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.allocator.RegularContainerAllocator.preCheckForNodeCandidateSet(RegularContainerAllocator.java:145)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.allocator.RegularContainerAllocator.allocate(RegularContainerAllocator.java:837)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.allocator.RegularContainerAllocator.assignContainers(RegularContainerAllocator.java:890)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.allocator.ContainerAllocator.assignContainers(ContainerAllocator.java:54)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerApp.assignContainers(FiCaSchedulerApp.java:977)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.LeafQueue.assignContainers(LeafQueue.java:1173)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.ParentQueue.assignContainersToChildQueues(ParentQueue.java:795)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.ParentQueue.assignContainers(ParentQueue.java:623)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.allocateOrReserveNewContainers(CapacityScheduler.java:1630)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.allocateContainerOnSingleNode(CapacityScheduler.java:1624)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.allocateContainersToNode(CapacityScheduler.java:1727)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.allocateContainersToNode(CapacityScheduler.java:1476)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.nodeUpdate(CapacityScheduler.java:1312)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.handle(CapacityScheduler.java:1785)
> 	at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.handle(CapacityScheduler.java:171)
> 	at org.apache.hadoop.yarn.event.EventDispatcher$EventProcessor.run(EventDispatcher.java:66)
> 	at java.lang.Thread.run(Thread.java:748)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

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