From 60d82ac61f2afa2a61c8eeabf20e45b5a89311d0 Mon Sep 17 00:00:00 2001 From: Yongjun Zhang Date: Wed, 7 Feb 2018 14:19:18 -0800 Subject: [PATCH] HDFS-13115. In getNumUnderConstructionBlocks(), ignore the inodeIds for which the inodes have been deleted. Contributed by Yongjun Zhang. (cherry picked from commit f491f717e9ee6b75ad5cfca48da9c6297e94a8f7) Conflicts: hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java --- .../hadoop/hdfs/server/namenode/LeaseManager.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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 29b4fe18250..47e08913a6e 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 @@ -142,7 +142,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 " + id + + " in getNumUnderConstructionBlocks()."); + continue; + } + final INodeFile cons = inode.asFile(); if (!cons.isUnderConstruction()) { LOG.warn("The file " + cons.getFullPathName() + " is not under construction but has lease."); @@ -153,10 +161,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; }