HDFS-15038. TestFsck testFsckListCorruptSnapshotFiles is failing in trunk. Contributed by hemanthboyina.

This commit is contained in:
Inigo Goiri 2020-05-14 11:26:31 -07:00
parent cf12c1349d
commit b5eb08a0d9
1 changed files with 29 additions and 22 deletions

View File

@ -1034,17 +1034,7 @@ public class TestFsck {
}
}
// wait for the namenode to see the corruption
final NamenodeProtocols namenode = cluster.getNameNodeRpc();
CorruptFileBlocks corruptFileBlocks = namenode
.listCorruptFileBlocks("/corruptData", null);
int numCorrupt = corruptFileBlocks.getFiles().length;
while (numCorrupt == 0) {
Thread.sleep(1000);
corruptFileBlocks = namenode
.listCorruptFileBlocks("/corruptData", null);
numCorrupt = corruptFileBlocks.getFiles().length;
}
waitForCorruptionBlocks(3, "/corruptData");
outStr = runFsck(conf, -1, true, "/corruptData", "-list-corruptfileblocks");
System.out.println("2. bad fsck out: " + outStr);
assertTrue(outStr.contains("has 3 CORRUPT files"));
@ -1956,17 +1946,7 @@ public class TestFsck {
hdfs.delete(fp, false);
numFiles--;
// wait for the namenode to see the corruption
final NamenodeProtocols namenode = cluster.getNameNodeRpc();
CorruptFileBlocks corruptFileBlocks = namenode
.listCorruptFileBlocks("/corruptData", null);
int numCorrupt = corruptFileBlocks.getFiles().length;
while (numCorrupt == 0) {
Thread.sleep(1000);
corruptFileBlocks = namenode
.listCorruptFileBlocks("/corruptData", null);
numCorrupt = corruptFileBlocks.getFiles().length;
}
waitForCorruptionBlocks(numSnapshots, "/corruptData");
// with -includeSnapshots all files are reported
outStr = runFsck(conf, -1, true, "/corruptData",
@ -1984,6 +1964,33 @@ public class TestFsck {
assertFalse(outStr.contains("/.snapshot/"));
}
/**
* Wait for the namenode to see the corruption.
* @param corruptBlocks The expected number of corruptfilelocks
* @param path The Directory Path where corruptfileblocks exists
* @throws IOException
*/
private void waitForCorruptionBlocks(final int corruptBlocks,
final String path) throws Exception {
GenericTestUtils.waitFor(new Supplier<Boolean>() {
@Override
public Boolean get() {
try {
final NamenodeProtocols namenode = cluster.getNameNodeRpc();
CorruptFileBlocks corruptFileBlocks =
namenode.listCorruptFileBlocks(path, null);
int numCorrupt = corruptFileBlocks.getFiles().length;
if (numCorrupt == corruptBlocks) {
return true;
}
} catch (Exception e) {
LOG.error("Exception while getting Corrupt file blocks", e);
}
return false;
}
}, 100, 10000);
}
@Test (timeout = 300000)
public void testFsckMoveAfterCorruption() throws Exception {
final int dfsBlockSize = 512 * 1024;