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

Tsz Wo Nicholas Sze commented on HDFS-6680:
-------------------------------------------

{code}
-      for (int i = 0; i < Math.min(favoredNodes.size(), numOfReplicas); i++) {
+      for (int i = 0; i < favoredNodes.size() && results.size() < 
numOfReplicas; i++) {
{code}
I found out this bug by the new test.  Consider favoredNodes.size() == 4 and 
numOfReplicas == 3.  So min is 3 and only the first 3 datanodes will be tried 
before the change.  If the one of these three datanodes is not chosen, it won't 
try the 4th datanode.

> BlockPlacementPolicyDefault does not choose favored nodes correctly
> -------------------------------------------------------------------
>
>                 Key: HDFS-6680
>                 URL: https://issues.apache.org/jira/browse/HDFS-6680
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: namenode
>            Reporter: Tsz Wo Nicholas Sze
>            Assignee: Tsz Wo Nicholas Sze
>         Attachments: h6680_20140714.patch, h6680_20140716.patch
>
>
> In one of the chooseTarget(..) methods, it tries all the favoredNodes to 
> chooseLocalNode(..).  It expects chooseLocalNode to return null if the local 
> node is not a good target.  Unfortunately, chooseLocalNode will fallback to 
> chooseLocalRack but not returning null.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to