Hello,

I have a hdfs behavior that I cannot explain: when creating a file in
hdfs, closing it, and counting the number of servers containing a
replicated block, I don't have immediately the right answer (3): I may
get 2 sometimes. If I wait before counting, then it's always 3. Is
this to be expected? Here is a piece of code showing the point.

Thanks,

N.

--
package org.apache.hadoop.test;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.junit.Test;

import static junit.framework.Assert.assertEquals;

public class TestHDFS {

  @Test
  public void testFSUTils() throws Exception {
    final Configuration conf = new Configuration();
    final String hosts[] = {"host1", "host2", "host3", "host4"};
    final byte[] data = new byte[1]; // Will fit in one block
    final Path testFile = new Path("/test1.txt");

      MiniDFSCluster dfsCluster = new MiniDFSCluster(0, conf,
hosts.length, true, true, true, null, null, hosts, null);
    try {
      FileSystem fs = dfsCluster.getFileSystem();
      dfsCluster.waitClusterUp();

      for (int i = 0; i < 200; ++i) {
        FSDataOutputStream out = fs.create(testFile);
        out.write(data, 0, 1);
        out.close();

        // Put a sleep here to make me work
        //Thread.sleep(1000);

        FileStatus status = fs.getFileStatus(testFile);
        int nbHosts = fs.getFileBlockLocations(status, 0,
status.getLen())[0].getHosts().length;
        assertEquals(1, fs.getFileBlockLocations(status, 0,
status.getLen()).length);
        assertEquals("Wrong number of hosts distributing blocks at
iteration " + i, 3, nbHosts);

        fs.delete(testFile, true);
      }

    } finally {
      dfsCluster.shutdown();
    }
  }
}

Reply via email to