HDFS-13115. In getNumUnderConstructionBlocks(), ignore the inodeIds for which the inodes have been deleted. Contributed by Yongjun Zhang.

Conflicts:
	hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java

(cherry picked from commit 60d82ac61f)
This commit is contained in:
Yongjun Zhang 2018-02-07 14:19:18 -08:00 committed by Xiao Chen
parent 2d6ab20007
commit 5105b60614
1 changed files with 11 additions and 2 deletions

View File

@ -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;
}