import java.util.ArrayList;
import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.ByteWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.SequenceFile.Writer;
import org.apache.hadoop.io.SequenceFile.CompressionType;


public class TestWriteConcurrency {
  public static void main(String[] args) throws Exception {
    final Configuration c = new Configuration();
    final FileSystem fs = FileSystem.get(c);
		
    final int NUM = 1000*1000;

    for (int num_thr=1; num_thr <= 8; num_thr++) {
      ArrayList<Thread> thrs = new ArrayList<Thread>(num_thr);
      for (int i = 0; i < num_thr; i++) {
        final int ii = i;
        final int num_thr2 = num_thr;
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
					
              try {
                Writer f = SequenceFile.createWriter(fs, c, new Path("/dev/shm/toddtest/" + ii ), ByteWritable.class, ByteWritable.class, CompressionType.NONE);
                ByteWritable v = new ByteWritable();
						
                long time = System.currentTimeMillis();
                for (int i = 0; i < NUM; i ++)
                  f.append(v, v);
                f.close();
                long end = System.currentTimeMillis();
						
                System.out.printf("%d %f\n", num_thr2, (float)(1000 * NUM)/(end - time));
						
              } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
              }
					
            }
          });
        t.start();
        thrs.add(t);
      }
      for (Thread t : thrs) {
        t.join();
      }
    }
    FileSystem.printStatistics();
  }
}