package com.scoopit.weedfs.benchmark; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.MessageDigest; import java.util.Random; import akka.actor.ActorRef; import akka.actor.Props; import akka.actor.UntypedActor; import com.scoopit.weedfs.client.AssignParams; import com.scoopit.weedfs.client.Assignation; import com.scoopit.weedfs.client.ReplicationStrategy; import com.scoopit.weedfs.client.WeedFSClient; import com.scoopit.weedfs.client.WeedFSClientBuilder; public class UploadRandomFile extends UntypedActor { Random random = new Random(); final ActorRef statsActor; public static Props mkProps(ActorRef statsActor) { return Props.create(UploadRandomFile.class, statsActor); } public UploadRandomFile(ActorRef statsActor){ this.statsActor = statsActor; } @Override public void onReceive(Object arg0) throws Exception { File f = File.createTempFile("weedfs-load-test", "tmp"); f.deleteOnExit(); FileOutputStream fos = new FileOutputStream(f); byte[] buf = new byte[random.nextInt(100) + 50]; MessageDigest md5 = MessageDigest.getInstance("MD5"); int size = 0; for (int i = 0; i < random.nextInt(1000000) + 1; i++) { random.nextBytes(buf); fos.write(buf); md5.update(buf); size+=buf.length; } fos.close(); WeedFSClient client = WeedFSClientBuilder.createBuilder().setMasterUrl(LoadTest.MASTER_URL).build(); Assignation a = client.assign(new AssignParams("java-loadtest", ReplicationStrategy.None)); // System.out.println(a.weedFSFile.fid + " assigned"); int writtenSize = client.write(a.weedFSFile, a.location, new FileInputStream(f), "someName"); if (writtenSize != size) { statsActor.tell(StatsCollector.Event.wrongUploadedSize, getSelf()); return; } // System.out.println(a.weedFSFile.fid + " written, size=" + size); // update database LoadTest.fsDb.put(a.weedFSFile.fid, md5.digest()); statsActor.tell(StatsCollector.Event.writeFile, getSelf()); } }