HDFS-10990. TestPendingInvalidateBlock should wait for IBRs. Contributed by Yiqun Lin.

This commit is contained in:
Kihwal Lee 2016-10-14 11:38:48 -05:00
parent dbe663d524
commit 8a9f6635a3
1 changed files with 9 additions and 4 deletions

View File

@ -86,6 +86,8 @@ public class TestPendingInvalidateBlock {
public void testPendingDeletion() throws Exception {
final Path foo = new Path("/foo");
DFSTestUtil.createFile(dfs, foo, BLOCKSIZE, REPLICATION, 0);
DFSTestUtil.waitForReplication(dfs, foo, REPLICATION, 10000);
// restart NN
cluster.restartNameNode(true);
InvalidateBlocks invalidateBlocks =
@ -98,6 +100,7 @@ public class TestPendingInvalidateBlock {
"invalidateBlocks", mockIb);
dfs.delete(foo, true);
waitForNumPendingDeletionBlocks(REPLICATION);
Assert.assertEquals(0, cluster.getNamesystem().getBlocksTotal());
Assert.assertEquals(REPLICATION, cluster.getNamesystem()
.getPendingDeletionBlocks());
@ -105,7 +108,7 @@ public class TestPendingInvalidateBlock {
dfs.getPendingDeletionBlocksCount());
Mockito.doReturn(0L).when(mockIb).getInvalidationDelay();
waitForBlocksToDelete();
waitForNumPendingDeletionBlocks(0);
Assert.assertEquals(0, cluster.getNamesystem().getBlocksTotal());
Assert.assertEquals(0, cluster.getNamesystem().getPendingDeletionBlocks());
Assert.assertEquals(0, dfs.getPendingDeletionBlocksCount());
@ -182,7 +185,7 @@ public class TestPendingInvalidateBlock {
Assert.assertEquals(4, cluster.getNamesystem().getPendingDeletionBlocks());
cluster.restartNameNode(true);
waitForBlocksToDelete();
waitForNumPendingDeletionBlocks(0);
Assert.assertEquals(3, cluster.getNamesystem().getBlocksTotal());
Assert.assertEquals(0, cluster.getNamesystem().getPendingDeletionBlocks());
}
@ -199,7 +202,8 @@ public class TestPendingInvalidateBlock {
return cluster.getNamesystem().getUnderReplicatedBlocks();
}
private void waitForBlocksToDelete() throws Exception {
private void waitForNumPendingDeletionBlocks(final int numBlocks)
throws Exception {
GenericTestUtils.waitFor(new Supplier<Boolean>() {
@Override
@ -207,7 +211,8 @@ public class TestPendingInvalidateBlock {
try {
cluster.triggerBlockReports();
if (cluster.getNamesystem().getPendingDeletionBlocks() == 0) {
if (cluster.getNamesystem().getPendingDeletionBlocks()
== numBlocks) {
return true;
}
} catch (Exception e) {