You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ay...@apache.org on 2020/01/28 17:52:36 UTC
[hadoop] branch branch-3.2 updated: HDFS-14993. checkDiskError
doesn't work during datanode startup. Contributed by Yang Yun.
This is an automated email from the ASF dual-hosted git repository.
ayushsaxena pushed a commit to branch branch-3.2
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.2 by this push:
new 8a1b02f HDFS-14993. checkDiskError doesn't work during datanode startup. Contributed by Yang Yun.
8a1b02f is described below
commit 8a1b02f44cbef6f76c1e8d99cb7e4d7c0b2b240e
Author: Ayush Saxena <ay...@apache.org>
AuthorDate: Tue Jan 28 22:59:26 2020 +0530
HDFS-14993. checkDiskError doesn't work during datanode startup. Contributed by Yang Yun.
---
.../hadoop/hdfs/server/datanode/DataNode.java | 6 ++---
.../server/datanode/TestDataNodeVolumeFailure.java | 31 ++++++++++++++++++++++
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java
index 7bb72df..cfe3054 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java
@@ -1678,14 +1678,14 @@ public class DataNode extends ReconfigurableBase
// the dataset, block scanners, etc.
initStorage(nsInfo);
- // Exclude failed disks before initializing the block pools to avoid startup
- // failures.
- checkDiskError();
try {
data.addBlockPool(nsInfo.getBlockPoolID(), getConf());
} catch (AddBlockPoolException e) {
handleAddBlockPoolError(e);
}
+ // HDFS-14993: check disk after add the block pool info.
+ checkDiskError();
+
blockScanner.enableBlockPoolId(bpos.getBlockPoolId());
initDirectoryScanner(getConf());
initDiskBalancer(data, getConf());
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeVolumeFailure.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeVolumeFailure.java
index 4c691b4..d9ec2cd 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeVolumeFailure.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeVolumeFailure.java
@@ -868,4 +868,35 @@ public class TestDataNodeVolumeFailure {
}
}
}
+
+ /*
+ * Verify the failed volume can be cheched during dn startup
+ */
+ @Test(timeout = 120000)
+ public void testVolumeFailureDuringStartup() throws Exception {
+ LOG.debug("Data dir: is " + dataDir.getPath());
+
+ // fail the volume
+ data_fail = cluster.getInstanceStorageDir(1, 0);
+ failedDir = MiniDFSCluster.getFinalizedDir(data_fail,
+ cluster.getNamesystem().getBlockPoolId());
+ failedDir.setReadOnly();
+
+ // restart the dn
+ cluster.restartDataNode(1);
+ final DataNode dn = cluster.getDataNodes().get(1);
+
+ // should get the failed volume during startup
+ GenericTestUtils.waitFor(new Supplier<Boolean>() {
+ @Override
+ public Boolean get() {
+ return dn.getFSDataset() !=null &&
+ dn.getFSDataset().getVolumeFailureSummary() != null &&
+ dn.getFSDataset().getVolumeFailureSummary().
+ getFailedStorageLocations()!= null &&
+ dn.getFSDataset().getVolumeFailureSummary().
+ getFailedStorageLocations().length == 1;
+ }
+ }, 10, 30 * 1000);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org