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

Bikas Saha commented on YARN-660:
---------------------------------

Vinod, I have iterated through different combinations of generics including the 
one you suggest. I found that the current version is the least ugly wrt user 
code. Both the test code for the AMRMClient as well as my use of it in TEZ gave 
me that impression. If you write user code that has to always cast/convert back 
from ContainerRequest to user-defined types you will see that it looks ugly and 
I dont want users to keep having to cast these value when they use specific 
types. The only user overhead when they use ContainerRequest is to add a 
<ContainerRequest> when declaring the member variable and during new. 
Thereafter everything works. And ContainerRequest is something that they 
anyways have to include in the code. Look at the diff of TestAMRMClient to see 
the minimal changes needed to make the existing code compile. Ideally if there 
was a typedef in Java then even that could be hidden but there isnt.
IMO, ContainerRequest is useful mostly in cases when the user wants a bunch of 
containers at *. For most of the other cases where requests are made with more 
specificity StoredContainerRequest is more useful. Its provided by the library 
because it will be commonly needed and also to support returning matching 
requests from within the AMRMClient for reasons outlined earlier. Storing and 
retrieving matching requests in a meaningful manner cannot be done until we 
limit the number of containers in an individual request to 1. 
StoredContainerRequest provides a clear type inside the AMRMClient to say what 
to store and also to limit the container count per request to 1. e.g. if 
AMRMClient will save simple ContainerRequest then lets say it saves the 
container request in addContainerRequest(ContainerRequest(P1,R1,Count=4)) and 
then if user calls removeContainerRequest(ContainerRequest(P1,R1,Count=3)) its 
hard for AMRMClient to tell if the stored container request should be removed 
or not.
Cookies are not required but very useful in reducing user burden. If we think 
about using AMRMClient inside the MR app master (or see the impl of TEZ) then 
we will find that for every request we need to save a cookie somewhere (eg. 
Scheduler*LaunchEvent) that will be used when the request is matched to a 
container. Either the client can write a map to maintain and store this 
relationship or the library provides a helper cookie to keep the info in one 
place.

Let me know if you have any other comments.
                
> Improve AMRMClient with cookies and matching requests
> -----------------------------------------------------
>
>                 Key: YARN-660
>                 URL: https://issues.apache.org/jira/browse/YARN-660
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>    Affects Versions: 2.0.5-beta
>            Reporter: Bikas Saha
>            Assignee: Bikas Saha
>             Fix For: 2.0.5-beta
>
>         Attachments: YARN-660.1.patch, YARN-660.2.patch, YARN-660.3.patch, 
> YARN-660.4.patch
>
>


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to