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