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

This commit is contained in:
Andrew Wang 2016-10-13 11:41:37 -07:00
parent 008122b3c9
commit fdce515091
1 changed files with 9 additions and 4 deletions

View File

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