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

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

> ... If the file has no blocks or juse one block, it still indicated that the 
> penultimate block is not replicated because it not exist. ...

This is not a universally true statement.  It is correct to consider a 
non-existing block either well replicated or not replicated.  We chose to 
consider it as replicated in the current code.

Indeed, it is incorrect if fsn.checkFileProgress(src, pendingFile, false) 
returns false when pendingFile.getPenultimateBlock() == null.  It means that 
checkFileProgress cannot handle 1-block and 0-block files properly.

> Wrong checking penultimate block replicated in FSNamesystem
> -----------------------------------------------------------
>
>                 Key: HDFS-9662
>                 URL: https://issues.apache.org/jira/browse/HDFS-9662
>             Project: Hadoop HDFS
>          Issue Type: Bug
>    Affects Versions: 2.7.1
>            Reporter: Lin Yiqun
>            Assignee: Lin Yiqun
>         Attachments: HDFS-9662.001.patch, HDFS-9662.002.patch
>
>
> There is a bug in checking penultimate block replicated in FSNamesystem.
> {code}
> /**
>    * Check that the indicated file's blocks are present and
>    * replicated.  If not, return false. If checkall is true, then check
>    * all blocks, otherwise check only penultimate block.
>    */
>   boolean checkFileProgress(String src, INodeFile v, boolean checkall) {
>     assert hasReadLock();
>     if (checkall) {
>       return blockManager.checkBlocksProperlyReplicated(src, v
>           .getBlocks());
>     } else {
>       // check the penultimate block of this file
>       BlockInfo b = v.getPenultimateBlock();
>       return b == null ||
>           blockManager.checkBlocksProperlyReplicated(
>               src, new BlockInfo[] { b });
>     }
>   }
> {code}
> When the param checkall is true, the checking operations is true.But if 
> checkall is false, it will check the penultimate block of this file. And if 
> the BlockInfo b is null, it will return true by this code, but actually it 
> should be return false because the penultimate block is not replicated and 
> has no blockInfo.



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

Reply via email to