@Override
  public List<Block> getBlocksInTheSameRegion(Block block) {

    int bufferId =
        assignor.assign(block.getBlockId(), block.getPrimaryDiskId(), block.getReplicaLevel());

    BufferRegion region = getBufferRegion(bufferId, block.getReplicaLevel());

    return region.getBufferedBlocks();
  }
  @Override
  public Block write(Block block) {

    int bufferId =
        assignor.assign(block.getBlockId(), block.getPrimaryDiskId(), block.getReplicaLevel());

    BufferRegion region = getBufferRegion(bufferId, block.getReplicaLevel());

    return region.write(block);
  }
  @Override
  public Block remove(Block block) {

    if (block == null) return null;

    int bufferId =
        assignor.assign(block.getBlockId(), block.getPrimaryDiskId(), block.getReplicaLevel());

    BufferRegion region = getBufferRegion(bufferId, block.getReplicaLevel());

    return region.remove(block.getBlockId());
  }
 @Override
 public int getCorrespondingBufferId(Block block) {
   return assignor.assign(block.getBlockId(), block.getPrimaryDiskId(), block.getReplicaLevel());
 }