HDFS-14993. checkDiskError doesn't work during datanode startup. Contributed by Yang Yun.
This commit is contained in:
parent
08251538fe
commit
87c198468b
@ -1701,14 +1701,14 @@ void initBlockPool(BPOfferService bpos) throws IOException {
|
|||||||
// the dataset, block scanners, etc.
|
// the dataset, block scanners, etc.
|
||||||
initStorage(nsInfo);
|
initStorage(nsInfo);
|
||||||
|
|
||||||
// Exclude failed disks before initializing the block pools to avoid startup
|
|
||||||
// failures.
|
|
||||||
checkDiskError();
|
|
||||||
try {
|
try {
|
||||||
data.addBlockPool(nsInfo.getBlockPoolID(), getConf());
|
data.addBlockPool(nsInfo.getBlockPoolID(), getConf());
|
||||||
} catch (AddBlockPoolException e) {
|
} catch (AddBlockPoolException e) {
|
||||||
handleAddBlockPoolError(e);
|
handleAddBlockPoolError(e);
|
||||||
}
|
}
|
||||||
|
// HDFS-14993: check disk after add the block pool info.
|
||||||
|
checkDiskError();
|
||||||
|
|
||||||
blockScanner.enableBlockPoolId(bpos.getBlockPoolId());
|
blockScanner.enableBlockPoolId(bpos.getBlockPoolId());
|
||||||
initDirectoryScanner(getConf());
|
initDirectoryScanner(getConf());
|
||||||
initDiskBalancer(data, getConf());
|
initDiskBalancer(data, getConf());
|
||||||
|
@ -916,4 +916,35 @@ public boolean isSimulated() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user