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

Reply via email to