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:
parent
2d6ab20007
commit
5105b60614
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue