[
https://issues.apache.org/jira/browse/HDFS-16985?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17716491#comment-17716491
]
ASF GitHub Bot commented on HDFS-16985:
---------------------------------------
Hexiaoqiao commented on code in PR #5564:
URL: https://github.com/apache/hadoop/pull/5564#discussion_r1177275219
##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestFsDatasetImpl.java:
##########
@@ -116,10 +103,7 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.anyList;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.*;
Review Comment:
as last comment.
##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestFsDatasetImpl.java:
##########
@@ -31,10 +31,7 @@
import org.apache.hadoop.fs.DF;
import org.apache.hadoop.hdfs.server.blockmanagement.BlockManager;
-import org.apache.hadoop.hdfs.server.datanode.DataNodeFaultInjector;
-import org.apache.hadoop.hdfs.server.datanode.DataSetLockManager;
-import org.apache.hadoop.hdfs.server.datanode.DirectoryScanner;
-import org.apache.hadoop.hdfs.server.datanode.LocalReplica;
+import org.apache.hadoop.hdfs.server.datanode.*;
Review Comment:
Please don't import using wildcard.
##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestFsDatasetImpl.java:
##########
@@ -1919,4 +1903,54 @@ public void delayDeleteReplica() {
DataNodeFaultInjector.set(oldInjector);
}
}
+ @Test
+ public void tesInvalidateMissingBlock() throws Exception {
+ long blockSize = 1024;
+ int heatbeatInterval = 1;
+ HdfsConfiguration c = new HdfsConfiguration();
+ c.setInt(DFSConfigKeys.DFS_HEARTBEAT_INTERVAL_KEY, heatbeatInterval);
+ c.setLong(DFS_BLOCK_SIZE_KEY, blockSize);
+ MiniDFSCluster cluster = new MiniDFSCluster.Builder(c).
+ numDataNodes(1).build();
+ try {
+ cluster.waitActive();
+ DFSTestUtil.createFile(cluster.getFileSystem(), new Path("/a"),
+ blockSize, (short)1, 0);
+
+ String bpid = cluster.getNameNode().getNamesystem().getBlockPoolId();
+ DataNode dn = cluster.getDataNodes().get(0);
+ FsDatasetImpl fsdataset = (FsDatasetImpl) dn.getFSDataset();
+ List<ReplicaInfo> replicaInfos = fsdataset.getFinalizedBlocks(bpid);
+ assertEquals(1, replicaInfos.size());
+
+ ReplicaInfo replicaInfo = replicaInfos.get(0);
+ String blockPath = replicaInfo.getBlockURI().getPath();
+ String metaPath = replicaInfo.getMetadataURI().getPath();
+ File blockFile = new File(blockPath);
+ File metaFile = new File(metaPath);
+
+ // mock local block file not found when disk with some exception
Review Comment:
Please use a capital letter at the beginning of the sentences and period at
the end.
##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestFsDatasetImpl.java:
##########
@@ -1919,4 +1903,54 @@ public void delayDeleteReplica() {
DataNodeFaultInjector.set(oldInjector);
}
}
+ @Test
Review Comment:
1. Leave one empty line between methods.
2. Please add some javadoc for this tests about what it will cover.
> delete local block file when FileNotFoundException occurred may lead to
> missing block.
> --------------------------------------------------------------------------------------
>
> Key: HDFS-16985
> URL: https://issues.apache.org/jira/browse/HDFS-16985
> Project: Hadoop HDFS
> Issue Type: Bug
> Components: datanode
> Reporter: Chengwei Wang
> Assignee: Chengwei Wang
> Priority: Major
> Labels: pull-request-available
>
> We encounterd several missing-block problem in our production cluster which
> hdfs running on AWS EC2 + EBS.
> The root cause:
> # the block remains only 1 replication left and hasn't been reconstruction
> # DN checks block file existing when BlockSender construction
> # the EBS checking failed and throw FileNotFoundException (EBS may be in
> fault condition)
> # DN invalidateBlock and schedule block async deletion
> # EBS already back to normal when DN do delete block
> # the block file be delete permanently and can't be recovered
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]