Java 类org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.StatefulBlockInfo 实例源码

项目:aliyun-oss-hadoop-fs    文件:TestReplicationPolicy.java   
@Test(timeout = 60000)
public void testAddStoredBlockDoesNotCauseSkippedReplication()
    throws IOException {
  FSNamesystem mockNS = mock(FSNamesystem.class);
  when(mockNS.hasWriteLock()).thenReturn(true);
  when(mockNS.hasReadLock()).thenReturn(true);
  BlockManager bm = new BlockManager(mockNS, new HdfsConfiguration());
  UnderReplicatedBlocks underReplicatedBlocks = bm.neededReplications;

  BlockInfo block1 = genBlockInfo(ThreadLocalRandom.current().nextLong());
  BlockInfo block2 = genBlockInfo(ThreadLocalRandom.current().nextLong());

  // Adding QUEUE_UNDER_REPLICATED block
  underReplicatedBlocks.add(block1, 0, 0, 1, 1);

  // Adding QUEUE_UNDER_REPLICATED block
  underReplicatedBlocks.add(block2, 0, 0, 1, 1);

  List<List<BlockInfo>> chosenBlocks;

  // Choose 1 block from UnderReplicatedBlocks. Then it should pick 1 block
  // from QUEUE_VERY_UNDER_REPLICATED.
  chosenBlocks = underReplicatedBlocks.chooseUnderReplicatedBlocks(1);
  assertTheChosenBlocks(chosenBlocks, 1, 0, 0, 0, 0);

  // Adding this block collection to the BlockManager, so that when we add the
  // block under construction, the BlockManager will realize the expected
  // replication has been achieved and remove it from the under-replicated
  // queue.
  BlockInfoContiguous info = new BlockInfoContiguous(block1, (short) 1);
  info.convertToBlockUnderConstruction(BlockUCState.UNDER_CONSTRUCTION, null);
  info.setBlockCollectionId(1000L);

  final INodeFile file = TestINodeFile.createINodeFile(1000L);
  when(mockNS.getBlockCollection(1000L)).thenReturn(file);
  bm.addBlockCollection(info, file);

  // Adding this block will increase its current replication, and that will
  // remove it from the queue.
  bm.addStoredBlockUnderConstruction(new StatefulBlockInfo(info, info,
      ReplicaState.FINALIZED), storages[0]);

  // Choose 1 block from UnderReplicatedBlocks. Then it should pick 1 block
  // from QUEUE_VERY_UNDER_REPLICATED.
  // This block remains and should not be skipped over.
  chosenBlocks = underReplicatedBlocks.chooseUnderReplicatedBlocks(1);
  assertTheChosenBlocks(chosenBlocks, 1, 0, 0, 0, 0);
}