Newer
Older
package refit.application.rezk;
import java.util.Random;
import refit.application.rezk.common.REZKStat;
import refit.client.REFITClientLibrary;
import refit.config.REFITConfig;
import refit.config.REFITLogger;
import refit.util.REFITPayload;
import refit.util.REFITTime;
public class REZKTestClientReadWrite extends REZKTestClient {
private static final String[] paths = new String[REFITConfig.NR_OF_NODES];
private int counter = 0;
private Random rand;
public REZKTestClientReadWrite(REFITClientLibrary service) {
super(service);
synchronized (paths) {
if (paths[0] == null) {
for (int i = 0; i < paths.length; i++) {
paths[i] = String.format("%s%05d", "/node", i);
}
}
}
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
rand = new Random(service.getNodeID());
}
@Override
protected void work() throws Exception {
if (rand.nextFloat() < REFITConfig.READ_WRITE_RATIO) {
read();
} else {
write();
}
}
private void read() throws Exception {
// Invoke operation
long startTime = REFITTime.nanoTime.getAsLong();
byte[] data = client.getData(paths[counter], false, null, REFITConfig.ONLY_CONSISTENT);
long endTime = REFITTime.nanoTime.getAsLong();
service.getStatistics().event((long) ((endTime - startTime) / 1000f), service.getNodeID(), "r");
if (!REZKTestServer.verifyNodeData(counter, data)) {
REFITLogger.logEvent(this, "Node data verification failed for counter " + counter
+ " data " + REFITPayload.toString(data));
throw new Exception("Node contains invalid data");
}
counter = rand.nextInt(paths.length);
}
private void write() throws Exception {
byte[] data = REZKTestServer.createNodeData(counter);
// Invoke operation
long startTime = REFITTime.nanoTime.getAsLong();
REZKStat stat = client.setData(paths[counter], data, -1);
long endTime = REFITTime.nanoTime.getAsLong();
service.getStatistics().event((long) ((endTime - startTime) / 1000f), service.getNodeID(), "w");
// very unlikely
if (stat.dataLength != data.length) throw new Exception("Node data size mismatch");
counter = rand.nextInt(paths.length);
}
}