[ 
https://issues.apache.org/jira/browse/HDFS-7606?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Byron Wong updated HDFS-7606:
-----------------------------
    Attachment: HDFS-7606.patch

Added new patch.
We can just use the snapshotId passed in by the method as [~shv] pointed out.
The other spot is covered by the {{n>0}} check as mentioned by [~airbots] and 
[~shv].
[~airbots] For the unit test, the case that you've mentioned is only possible 
in the case when the INodeFile's blocks are null. This case is only possible in 
the case when we call {{INodeFile#destroyAndCollectBlocks}} or  
{{FSDirConcatOp#unprotectedConcat}} (i.e. we can only have null blocks when we 
want to completely destroy the INodeFile). The only way to reproduce the NPE is 
by explicitly creating an INodeFile with null blocks as you've done in your 
test. I don't think we need to reproduce the NPE in a unit test if this is the 
case.

> Missing null check in INodeFile#getBlocks()
> -------------------------------------------
>
>                 Key: HDFS-7606
>                 URL: https://issues.apache.org/jira/browse/HDFS-7606
>             Project: Hadoop HDFS
>          Issue Type: Bug
>    Affects Versions: 3.0.0
>            Reporter: Ted Yu
>            Assignee: Byron Wong
>            Priority: Minor
>         Attachments: HDFS-7606-1.patch, HDFS-7606.patch, HDFS-7606.patch
>
>
> {code}
>     BlockInfo[] snapshotBlocks = diff == null ? getBlocks() : 
> diff.getBlocks();
>     if(snapshotBlocks != null)
>       return snapshotBlocks;
>     // Blocks are not in the current snapshot
>     // Find next snapshot with blocks present or return current file blocks
>     snapshotBlocks = getDiffs().findLaterSnapshotBlocks(diff.getSnapshotId());
> {code}
> If diff is null and snapshotBlocks is null, NullPointerException would result 
> from the call to diff.getSnapshotId().



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

Reply via email to