@Test
  public void testBlockLocation() throws Exception {
    // We need to start HBase to get HConstants.HBASE_DIR set in conf
    htu.startMiniZKCluster();
    SingleProcessHBaseCluster hbm = htu.startMiniHBaseCluster();
    conf = hbm.getConfiguration();

    // The "/" is mandatory, without it we've got a null pointer exception on the namenode
    final String fileName = "/helloWorld";
    Path p = new Path(fileName);

    final int repCount = 3;
    Assert.assertTrue((short) cluster.getDataNodes().size() >= repCount);

    // Let's write the file
    FSDataOutputStream fop = dfs.create(p, (short) repCount);
    final double toWrite = 875.5613;
    fop.writeDouble(toWrite);
    fop.close();

    for (int i = 0; i < 10; i++) {
      // The interceptor is not set in this test, so we get the raw list at this point
      LocatedBlocks lbs;
      final long max = EnvironmentEdgeManager.currentTime() + 10000;
      do {
        lbs = getNamenode(dfs.getClient()).getBlockLocations(fileName, 0, 1);
        Assert.assertNotNull(lbs.getLocatedBlocks());
        Assert.assertEquals(1, lbs.getLocatedBlocks().size());
        Assert.assertTrue(
          "Expecting " + repCount + " , got " + getLocatedBlockLocations(lbs.get(0)).length,
          EnvironmentEdgeManager.currentTime() < max);
      } while (getLocatedBlockLocations(lbs.get(0)).length != repCount);

      // Should be filtered, the name is different => The order won't change
      Object[] originalList = lbs.getLocatedBlocks().toArray();
      HFileSystem.ReorderWALBlocks lrb = new HFileSystem.ReorderWALBlocks();
      lrb.reorderBlocks(conf, lbs, fileName);
      Assert.assertArrayEquals(originalList, lbs.getLocatedBlocks().toArray());

      // Should be reordered, as we pretend to be a file name with a compliant stuff
      Assert.assertNotNull(conf.get(HConstants.HBASE_DIR));
      Assert.assertFalse(conf.get(HConstants.HBASE_DIR).isEmpty());
      String pseudoLogFile = conf.get(HConstants.HBASE_DIR) + "/" + HConstants.HREGION_LOGDIR_NAME
        + "/" + host1 + ",6977,6576" + "/mylogfile";

      // Check that it will be possible to extract a ServerName from our construction
      Assert.assertNotNull("log= " + pseudoLogFile,
        AbstractFSWALProvider.getServerNameFromWALDirectoryName(dfs.getConf(), pseudoLogFile));

      // And check we're doing the right reorder.
      lrb.reorderBlocks(conf, lbs, pseudoLogFile);
      Assert.assertEquals(host1, getLocatedBlockLocations(lbs.get(0))[2].getHostName());

      // Check again, it should remain the same.
      lrb.reorderBlocks(conf, lbs, pseudoLogFile);
      Assert.assertEquals(host1, getLocatedBlockLocations(lbs.get(0))[2].getHostName());
    }
  }
Test that the reorder algo works as we expect.
hbase-server/src/test/java/org/apache/hadoop/hbase/fs/TestBlockReorderBlockLocation.java