HDFS-6753. Initialize checkDisk when DirectoryScanner not able to get files list for scanning (Contributed by J.Andreina)
(cherry picked from commit 4f75b15628
)
This commit is contained in:
parent
d223a4a594
commit
bc60404eaf
|
@ -741,6 +741,9 @@ Release 2.7.0 - UNRELEASED
|
|||
HDFS-7774. Unresolved symbols error while compiling HDFS on Windows 7/32 bit.
|
||||
(Kiran Kumar M R via cnauroth)
|
||||
|
||||
HDFS-6753. Initialize checkDisk when DirectoryScanner not able to get
|
||||
files list for scanning (J.Andreina via vinayakumarb)
|
||||
|
||||
BREAKDOWN OF HDFS-7584 SUBTASKS AND RELATED JIRAS
|
||||
|
||||
HDFS-7720. Quota by Storage Type API, tools and ClientNameNode
|
||||
|
|
|
@ -822,7 +822,7 @@ public class DataNode extends ReconfigurableBase
|
|||
reason = "verifcation is not supported by SimulatedFSDataset";
|
||||
}
|
||||
if (reason == null) {
|
||||
directoryScanner = new DirectoryScanner(data, conf);
|
||||
directoryScanner = new DirectoryScanner(this, data, conf);
|
||||
directoryScanner.start();
|
||||
} else {
|
||||
LOG.info("Periodic Directory Tree Verification scan is disabled because " +
|
||||
|
|
|
@ -63,6 +63,7 @@ public class DirectoryScanner implements Runnable {
|
|||
private final long scanPeriodMsecs;
|
||||
private volatile boolean shouldRun = false;
|
||||
private boolean retainDiffs = false;
|
||||
private final DataNode datanode;
|
||||
|
||||
final ScanInfoPerBlockPool diffs = new ScanInfoPerBlockPool();
|
||||
final Map<String, Stats> stats = new HashMap<String, Stats>();
|
||||
|
@ -308,7 +309,8 @@ public class DirectoryScanner implements Runnable {
|
|||
}
|
||||
}
|
||||
|
||||
DirectoryScanner(FsDatasetSpi<?> dataset, Configuration conf) {
|
||||
DirectoryScanner(DataNode datanode, FsDatasetSpi<?> dataset, Configuration conf) {
|
||||
this.datanode = datanode;
|
||||
this.dataset = dataset;
|
||||
int interval = conf.getInt(DFSConfigKeys.DFS_DATANODE_DIRECTORYSCAN_INTERVAL_KEY,
|
||||
DFSConfigKeys.DFS_DATANODE_DIRECTORYSCAN_INTERVAL_DEFAULT);
|
||||
|
@ -547,7 +549,7 @@ public class DirectoryScanner implements Runnable {
|
|||
for (int i = 0; i < volumes.size(); i++) {
|
||||
if (isValid(dataset, volumes.get(i))) {
|
||||
ReportCompiler reportCompiler =
|
||||
new ReportCompiler(volumes.get(i));
|
||||
new ReportCompiler(datanode,volumes.get(i));
|
||||
Future<ScanInfoPerBlockPool> result =
|
||||
reportCompileThreadPool.submit(reportCompiler);
|
||||
compilersInProgress.put(i, result);
|
||||
|
@ -585,8 +587,10 @@ public class DirectoryScanner implements Runnable {
|
|||
private static class ReportCompiler
|
||||
implements Callable<ScanInfoPerBlockPool> {
|
||||
private final FsVolumeSpi volume;
|
||||
private final DataNode datanode;
|
||||
|
||||
public ReportCompiler(FsVolumeSpi volume) {
|
||||
public ReportCompiler(DataNode datanode, FsVolumeSpi volume) {
|
||||
this.datanode = datanode;
|
||||
this.volume = volume;
|
||||
}
|
||||
|
||||
|
@ -611,6 +615,8 @@ public class DirectoryScanner implements Runnable {
|
|||
files = FileUtil.listFiles(dir);
|
||||
} catch (IOException ioe) {
|
||||
LOG.warn("Exception occured while compiling report: ", ioe);
|
||||
// Initiate a check on disk failure.
|
||||
datanode.checkDiskErrorAsync();
|
||||
// Ignore this directory and proceed.
|
||||
return report;
|
||||
}
|
||||
|
|
|
@ -299,10 +299,11 @@ public class TestDirectoryScanner {
|
|||
.build();
|
||||
try {
|
||||
cluster.waitActive();
|
||||
DataNode dataNode = cluster.getDataNodes().get(0);
|
||||
bpid = cluster.getNamesystem().getBlockPoolId();
|
||||
fds = DataNodeTestUtils.getFSDataset(cluster.getDataNodes().get(0));
|
||||
client = cluster.getFileSystem().getClient();
|
||||
scanner = new DirectoryScanner(fds, CONF);
|
||||
scanner = new DirectoryScanner(dataNode, fds, CONF);
|
||||
scanner.setRetainDiffs(true);
|
||||
FsDatasetTestUtil.stopLazyWriter(cluster.getDataNodes().get(0));
|
||||
|
||||
|
@ -340,9 +341,10 @@ public class TestDirectoryScanner {
|
|||
try {
|
||||
cluster.waitActive();
|
||||
bpid = cluster.getNamesystem().getBlockPoolId();
|
||||
DataNode dataNode = cluster.getDataNodes().get(0);
|
||||
fds = DataNodeTestUtils.getFSDataset(cluster.getDataNodes().get(0));
|
||||
client = cluster.getFileSystem().getClient();
|
||||
scanner = new DirectoryScanner(fds, CONF);
|
||||
scanner = new DirectoryScanner(dataNode, fds, CONF);
|
||||
scanner.setRetainDiffs(true);
|
||||
FsDatasetTestUtil.stopLazyWriter(cluster.getDataNodes().get(0));
|
||||
|
||||
|
@ -389,7 +391,8 @@ public class TestDirectoryScanner {
|
|||
client = cluster.getFileSystem().getClient();
|
||||
CONF.setInt(DFSConfigKeys.DFS_DATANODE_DIRECTORYSCAN_THREADS_KEY,
|
||||
parallelism);
|
||||
scanner = new DirectoryScanner(fds, CONF);
|
||||
DataNode dataNode = cluster.getDataNodes().get(0);
|
||||
scanner = new DirectoryScanner(dataNode, fds, CONF);
|
||||
scanner.setRetainDiffs(true);
|
||||
|
||||
// Add files with 100 blocks
|
||||
|
|
Loading…
Reference in New Issue