[
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)