HDFS-10426. TestPendingInvalidateBlock failed in trunk. Contributed by Yiqun Lin.
This commit is contained in:
parent
df1d0f5d56
commit
f55eb981dd
|
@ -18,7 +18,6 @@
|
|||
package org.apache.hadoop.hdfs.server.blockmanagement;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||
|
@ -40,6 +39,8 @@ import org.junit.Test;
|
|||
import org.mockito.Mockito;
|
||||
import org.mockito.internal.util.reflection.Whitebox;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
* Test if we can correctly delay the deletion of blocks.
|
||||
*/
|
||||
|
@ -87,13 +88,24 @@ public class TestPendingInvalidateBlock {
|
|||
DFSTestUtil.createFile(dfs, foo, BLOCKSIZE, REPLICATION, 0);
|
||||
// restart NN
|
||||
cluster.restartNameNode(true);
|
||||
InvalidateBlocks invalidateBlocks =
|
||||
(InvalidateBlocks) Whitebox.getInternalState(cluster.getNamesystem()
|
||||
.getBlockManager(), "invalidateBlocks");
|
||||
InvalidateBlocks mockIb = Mockito.spy(invalidateBlocks);
|
||||
// Return invalidation delay to delay the block's deletion
|
||||
Mockito.doReturn(1L).when(mockIb).getInvalidationDelay();
|
||||
Whitebox.setInternalState(cluster.getNamesystem().getBlockManager(),
|
||||
"invalidateBlocks", mockIb);
|
||||
dfs.delete(foo, true);
|
||||
|
||||
Assert.assertEquals(0, cluster.getNamesystem().getBlocksTotal());
|
||||
Assert.assertEquals(REPLICATION, cluster.getNamesystem()
|
||||
.getPendingDeletionBlocks());
|
||||
Assert.assertEquals(REPLICATION,
|
||||
dfs.getPendingDeletionBlocksCount());
|
||||
Thread.sleep(6000);
|
||||
Mockito.doReturn(0L).when(mockIb).getInvalidationDelay();
|
||||
|
||||
waitForBlocksToDelete();
|
||||
Assert.assertEquals(0, cluster.getNamesystem().getBlocksTotal());
|
||||
Assert.assertEquals(0, cluster.getNamesystem().getPendingDeletionBlocks());
|
||||
Assert.assertEquals(0, dfs.getPendingDeletionBlocksCount());
|
||||
|
@ -170,7 +182,7 @@ public class TestPendingInvalidateBlock {
|
|||
Assert.assertEquals(4, cluster.getNamesystem().getPendingDeletionBlocks());
|
||||
|
||||
cluster.restartNameNode(true);
|
||||
Thread.sleep(6000);
|
||||
waitForBlocksToDelete();
|
||||
Assert.assertEquals(3, cluster.getNamesystem().getBlocksTotal());
|
||||
Assert.assertEquals(0, cluster.getNamesystem().getPendingDeletionBlocks());
|
||||
}
|
||||
|
@ -187,4 +199,23 @@ public class TestPendingInvalidateBlock {
|
|||
return cluster.getNamesystem().getUnderReplicatedBlocks();
|
||||
}
|
||||
|
||||
private void waitForBlocksToDelete() throws Exception {
|
||||
GenericTestUtils.waitFor(new Supplier<Boolean>() {
|
||||
|
||||
@Override
|
||||
public Boolean get() {
|
||||
try {
|
||||
cluster.triggerBlockReports();
|
||||
|
||||
if (cluster.getNamesystem().getPendingDeletionBlocks() == 0) {
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Ignore the exception
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}, 6000, 60000);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue