HDFS-15092. TestRedudantBlocks#testProcessOverReplicatedAndRedudantBlock sometimes fails. Contributed by Fei Hui.

This commit is contained in:
Inigo Goiri 2020-01-21 13:29:20 -08:00
parent b657822b98
commit 8cfc3673dc
1 changed files with 13 additions and 3 deletions

View File

@ -35,8 +35,10 @@
import org.apache.hadoop.hdfs.protocol.LocatedBlocks;
import org.apache.hadoop.hdfs.protocol.LocatedStripedBlock;
import org.apache.hadoop.hdfs.protocol.SystemErasureCodingPolicies;
import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfoStriped;
import org.apache.hadoop.hdfs.server.datanode.SimulatedFSDataset;
import org.apache.hadoop.hdfs.util.StripedBlockUtil;
import org.apache.hadoop.test.GenericTestUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@ -108,18 +110,26 @@ public void testProcessOverReplicatedAndRedudantBlock() throws Exception {
blk.setBlockId(groupId + 2);
cluster.injectBlocks(i, Arrays.asList(blk), bpid);
BlockInfoStriped blockInfo =
(BlockInfoStriped)cluster.getNamesystem().getBlockManager()
.getStoredBlock(new Block(groupId));
// update blocksMap
cluster.triggerBlockReports();
// delete redundant block
cluster.triggerHeartbeats();
//wait for IBR
Thread.sleep(1100);
GenericTestUtils.waitFor(
() -> cluster.getNamesystem().getBlockManager()
.countNodes(blockInfo).liveReplicas() >= groupSize -1,
500, 10000);
// trigger reconstruction
cluster.triggerHeartbeats();
//wait for IBR
Thread.sleep(1100);
GenericTestUtils.waitFor(
() -> cluster.getNamesystem().getBlockManager()
.countNodes(blockInfo).liveReplicas() >= groupSize,
500, 10000);
HashSet<Long> blockIdsSet = new HashSet<Long>();