This is an automated email from the ASF dual-hosted git repository. tasanuma pushed a commit to branch branch-3.3 in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit 3a52ec0118c8e57101a4c76fe0e19ee3663e0994 Author: zhangshuyan <81411509+zhangshuy...@users.noreply.github.com> AuthorDate: Tue Aug 15 19:54:15 2023 +0800 HDFS-17150. EC: Fix the bug of failed lease recovery. (#5937). Contributed by Shuyan Zhang. Reviewed-by: hfutatzhanghb <1036798...@qq.com> Reviewed-by: Haiyang Hu <haiyang...@shopee.com> Signed-off-by: He Xiaoqiao <hexiaoq...@apache.org> (cherry picked from commit 655c3df0508ca4f3a89b57eddc61454bf2d92ccf) --- .../hadoop/hdfs/server/namenode/FSNamesystem.java | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index 03eba8b0c386..d0b623fff162 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -112,6 +112,7 @@ import static org.apache.hadoop.ha.HAServiceProtocol.HAServiceState.OBSERVER; import org.apache.hadoop.hdfs.protocol.ErasureCodingPolicyInfo; +import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfoStriped; import org.apache.hadoop.thirdparty.com.google.common.collect.Maps; import org.apache.hadoop.thirdparty.protobuf.ByteString; import org.apache.hadoop.hdfs.protocol.BatchedDirectoryListing; @@ -3711,7 +3712,12 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, lastBlock.getBlockType()); } - if (uc.getNumExpectedLocations() == 0 && lastBlock.getNumBytes() == 0) { + int minLocationsNum = 1; + if (lastBlock.isStriped()) { + minLocationsNum = ((BlockInfoStriped) lastBlock).getRealDataBlockNum(); + } + if (uc.getNumExpectedLocations() < minLocationsNum && + lastBlock.getNumBytes() == 0) { // There is no datanode reported to this block. // may be client have crashed before writing data to pipeline. // This blocks doesn't need any recovery. @@ -3719,8 +3725,18 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, pendingFile.removeLastBlock(lastBlock); finalizeINodeFileUnderConstruction(src, pendingFile, iip.getLatestSnapshotId(), false); - NameNode.stateChangeLog.warn("BLOCK* internalReleaseLease: " - + "Removed empty last block and closed file " + src); + if (uc.getNumExpectedLocations() == 0) { + // If uc.getNumExpectedLocations() is 0, regardless of whether it + // is a striped block or not, we should consider it as an empty block. + NameNode.stateChangeLog.warn("BLOCK* internalReleaseLease: " + + "Removed empty last block and closed file " + src); + } else { + // If uc.getNumExpectedLocations() is greater than 0, it means that + // minLocationsNum must be greater than 1, so this must be a striped + // block. + NameNode.stateChangeLog.warn("BLOCK* internalReleaseLease: " + + "Removed last unrecoverable block group and closed file " + src); + } return true; } // Start recovery of the last block for this file --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org