|
@@ -597,14 +597,15 @@ public class DirectoryScanner implements Runnable {
|
|
|
for (String bpid : bpList) {
|
|
|
LinkedList<ScanInfo> report = new LinkedList<ScanInfo>();
|
|
|
File bpFinalizedDir = volume.getFinalizedDir(bpid);
|
|
|
- result.put(bpid, compileReport(volume, bpFinalizedDir, report));
|
|
|
+ result.put(bpid,
|
|
|
+ compileReport(volume, bpFinalizedDir, bpFinalizedDir, report));
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/** Compile list {@link ScanInfo} for the blocks in the directory <dir> */
|
|
|
- private LinkedList<ScanInfo> compileReport(FsVolumeSpi vol, File dir,
|
|
|
- LinkedList<ScanInfo> report) {
|
|
|
+ private LinkedList<ScanInfo> compileReport(FsVolumeSpi vol,
|
|
|
+ File bpFinalizedDir, File dir, LinkedList<ScanInfo> report) {
|
|
|
File[] files;
|
|
|
try {
|
|
|
files = FileUtil.listFiles(dir);
|
|
@@ -622,12 +623,14 @@ public class DirectoryScanner implements Runnable {
|
|
|
*/
|
|
|
for (int i = 0; i < files.length; i++) {
|
|
|
if (files[i].isDirectory()) {
|
|
|
- compileReport(vol, files[i], report);
|
|
|
+ compileReport(vol, bpFinalizedDir, files[i], report);
|
|
|
continue;
|
|
|
}
|
|
|
if (!Block.isBlockFilename(files[i])) {
|
|
|
if (isBlockMetaFile("blk_", files[i].getName())) {
|
|
|
long blockId = Block.getBlockId(files[i].getName());
|
|
|
+ verifyFileLocation(files[i].getParentFile(), bpFinalizedDir,
|
|
|
+ blockId);
|
|
|
report.add(new ScanInfo(blockId, null, files[i], vol));
|
|
|
}
|
|
|
continue;
|
|
@@ -646,9 +649,24 @@ public class DirectoryScanner implements Runnable {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ verifyFileLocation(blockFile.getParentFile(), bpFinalizedDir,
|
|
|
+ blockId);
|
|
|
report.add(new ScanInfo(blockId, blockFile, metaFile, vol));
|
|
|
}
|
|
|
return report;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Verify whether the actual directory location of block file has the
|
|
|
+ * expected directory path computed using its block ID.
|
|
|
+ */
|
|
|
+ private void verifyFileLocation(File actualBlockDir,
|
|
|
+ File bpFinalizedDir, long blockId) {
|
|
|
+ File blockDir = DatanodeUtil.idToBlockDir(bpFinalizedDir, blockId);
|
|
|
+ if (actualBlockDir.compareTo(blockDir) != 0) {
|
|
|
+ LOG.warn("Block: " + blockId
|
|
|
+ + " has to be upgraded to block ID-based layout");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|