[ https://issues.apache.org/jira/browse/YARN-521?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13705283#comment-13705283 ]
Bikas Saha commented on YARN-521: --------------------------------- Shouldnt this also check that the inferred rack1 has relaxLocality set to false? {code} + ContainerRequest bothLevelRequest = + new ContainerRequest(capability, new String[] {"host3", "host4"}, + new String[] {NetworkTopology.DEFAULT_RACK, "/otherrack"}, + Priority.newInstance(3), 4, false); + client.addContainerRequest(bothLevelRequest); + + verifyResourceRequest(client, bothLevelRequest, ResourceRequest.ANY, false); + verifyResourceRequest(client, bothLevelRequest, NetworkTopology.DEFAULT_RACK, + true); + verifyResourceRequest(client, bothLevelRequest, "/otherrack", + true); + verifyResourceRequest(client, bothLevelRequest, "host3", true); + verifyResourceRequest(client, bothLevelRequest, "host4", true); + {code} The RM allows relaxLocality to be re-enabled on a location and priority. This allows users to change their minds about strict locality if they are unable to get those containers for a long time. The logic in the patch does not allow this to happen. In fact testDifferentLocalityRelaxationSamePriority() shows that it is not possible to do this with the current patch. testDifferentLocalityRelaxationSamePriority() looks to have been written to test for the case where host1 is specific resulting in rack1 to be false. Then host3 in rack1 cannot be made non-specific since the flag on rack1 will be inconsistent. It would be more clear if the second request had a different host. testLocalityRelaxationDifferentLevels() tests that specific host cannot be mixed with non-specific rack for the rack of that host. Can specific host be mixed with specific rack for the same rack as the host? Probably not. Can specific node host1 be mixed with specific rack on a different rack (rack2)? If yes, if a container is allocated on host2 in rack2, then what prevents getMachingRequests(*) from returning the requests for host1 and rack2 instead of only the request for rack2? Now that we have a client and server pieces done, has this been tested with a real cluster to see that it works for in practice? It would really help if we had a clear document (even javadoc) that clarifies what is legal and what is not. This will really help in code review, it will make sure we have better test coverage and in general will help users understand how to use the API. I am concerned that we are implementing something pretty subtle and we need to get it right logically before implementing the code. I havent even started thinking about how this interacts with the blacklisting logic that we have added to the RM. How specific requests interact with blacklist on the RM. And how both interact on the AMRMClient. And how both interact across RM and AMRMClient. Minor nits. How about "inferredRacks" instead of "filledInRacks"? How about JAVA standard library Collections.singletonList() instead of invoking google common Lists.newArrayList? > Augment AM - RM client module to be able to request containers only at > specific locations > ----------------------------------------------------------------------------------------- > > Key: YARN-521 > URL: https://issues.apache.org/jira/browse/YARN-521 > Project: Hadoop YARN > Issue Type: Sub-task > Components: api > Affects Versions: 2.0.3-alpha > Reporter: Sandy Ryza > Assignee: Sandy Ryza > Attachments: YARN-521-1.patch, YARN-521-2.patch, YARN-521-2.patch, > YARN-521.patch > > > When YARN-392 and YARN-398 are completed, it would be good for AMRMClient to > offer an easy way to access their functionality -- 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