HDFS-13115. In getNumUnderConstructionBlocks(), ignore the inodeIds for which the inodes have been deleted. Contributed by Yongjun Zhang.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/f491f717 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f491f717 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f491f717 Branch: refs/heads/HDFS-7240 Commit: f491f717e9ee6b75ad5cfca48da9c6297e94a8f7 Parents: b061215 Author: Yongjun Zhang <yzh...@cloudera.com> Authored: Wed Feb 7 12:58:09 2018 -0800 Committer: Yongjun Zhang <yzh...@cloudera.com> Committed: Wed Feb 7 12:58:09 2018 -0800 ---------------------------------------------------------------------- .../hadoop/hdfs/server/namenode/LeaseManager.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/f491f717/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java index 1e7a174..31fb2bb 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java @@ -144,7 +144,15 @@ public class LeaseManager { + "acquired before counting under construction blocks"; long numUCBlocks = 0; for (Long id : getINodeIdWithLeases()) { - final INodeFile cons = fsnamesystem.getFSDirectory().getInode(id).asFile(); + INode inode = fsnamesystem.getFSDirectory().getInode(id); + if (inode == null) { + // The inode could have been deleted after getINodeIdWithLeases() is + // called, check here, and ignore it if so + LOG.warn("Failed to find inode {} in getNumUnderConstructionBlocks().", + id); + continue; + } + final INodeFile cons = inode.asFile(); if (!cons.isUnderConstruction()) { LOG.warn("The file {} is not under construction but has lease.", cons.getFullPathName()); @@ -155,10 +163,11 @@ public class LeaseManager { continue; } for(BlockInfo b : blocks) { - if(!b.isComplete()) + if(!b.isComplete()) { numUCBlocks++; } } + } LOG.info("Number of blocks under construction: {}", numUCBlocks); return numUCBlocks; } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org