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

Chris Douglas commented on YARN-2883:
-------------------------------------

Concerning v004:
* The use of {{getRemoteUgi}} in 
{{QueuingContainerManagerImpl::stopContainerInternalIfNotQueued}} may be 
unnecessary, neither will it work as expected. The check for user credentials 
will likely use the UGI from the {{EventDispatcher}}, not the RPC call that 
initiated it (in {{stopContainerInternalIfNotQueued}}). Setting the cause to 
{{KILLED_BY_APPMASTER}} may be inappropriate if queued containers could be 
killed for other reasons.
* If an application completes, its queued containers should be cleared.
* In {{getContainerStatusInternal}}, if the {{ConcurrentMap}} is necessary, 
then it should call {{get()}} once on the instance rather than 
{{containsKey()}}/{{get()}}
* Rather than adding null checks for a disabled queuing context, this could 
support a null context that effectively disables the queuing logic (as in 
{{NodeStatusUpdaterImpl}})
* It seems the queuing is not fair. New containers are started immediately, 
without checking if the queue is empty. However, if the queue contains any 
entries, they should have started from {{onStopMonitoringContainer}}. With a 
large container at the front of the queue, smaller, queued containers will not 
get a chance to run while new, small containers will.
* The queue should be bounded in some way.

Minor
* {{NMContext}} can set the queuing context as final, rather than a separate 
{{setQueuingContext}}, which is not threadsafe as written.
* I didn't look through the test code in detail, but the {{DeletionService}} 
sleeping for 10s seems odd
* New loggers should use slf4j, and the {{LOG.level("Text {}", arg)}} syntax 
rather than {{isLevelEnabled()}}
* The default case of {{QueuingContainerManagerImpl::handle}} should throw
* {{0.f}} is a valid literal?
* {{killOpportContainers}} may want to log a warning if killing opportunistic 
containers is insufficient to satisfy the contract (after the loop). This would 
be helpful when debugging.
* Do {{queuedGuarRequests}} and {{queuedOpportRequests}} need to be 
synchronized? Or is the handler sufficient?
* {{QueuingContainersMonitorImpl::AllocatedContainerInfo}} could define 
equals/hashcode and use {{Collection::remove}} instead of defining 
{{removeContainerFromQueue}}

> Queuing of container requests in the NM
> ---------------------------------------
>
>                 Key: YARN-2883
>                 URL: https://issues.apache.org/jira/browse/YARN-2883
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: nodemanager, resourcemanager
>            Reporter: Konstantinos Karanasos
>            Assignee: Konstantinos Karanasos
>         Attachments: YARN-2883-trunk.004.patch, 
> YARN-2883-yarn-2877.001.patch, YARN-2883-yarn-2877.002.patch, 
> YARN-2883-yarn-2877.003.patch, YARN-2883-yarn-2877.004.patch
>
>
> We propose to add a queue in each NM, where queueable container requests can 
> be held.
> Based on the available resources in the node and the containers in the queue, 
> the NM will decide when to allow the execution of a queued container.
> In order to ensure the instantaneous start of a guaranteed-start container, 
> the NM may decide to pre-empt/kill running queueable containers.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to