package refit.application.rezk; import java.util.Random; import refit.client.REFITClientLibrary; import refit.config.REFITConfig; import refit.util.REFITTime; public class REZKTestClientExists extends REZKTestClient { private static final String[] prePaths = new String[2 * REFITConfig.NR_OF_NODES]; private String[] paths; private boolean[] isValidPath; private int counter = 0; public REZKTestClientExists(REFITClientLibrary service) { super(service); synchronized (prePaths) { if (prePaths[0] == null) { for (int i = 0; i < prePaths.length; i++) { prePaths[i] = String.format("%s%05d", "/node", i); } } } paths = new String[REFITConfig.NR_OF_NODES]; isValidPath = new boolean[paths.length]; // ensure reproducibility Random rand = new Random(service.getNodeID()); for (int i = 0; i < paths.length; i++) { int idx = rand.nextInt(prePaths.length); paths[i] = prePaths[idx]; isValidPath[i] = (idx < paths.length); } } @Override protected void work() throws Exception { // Invoke operation long startTime = REFITTime.nanoTime.getAsLong(); boolean exists = client.exists(paths[counter], false, REFITConfig.ONLY_CONSISTENT); long endTime = REFITTime.nanoTime.getAsLong(); service.getStatistics().event((long) ((endTime - startTime) / 1000f), service.getNodeID(), "e"); if (exists != isValidPath[counter]) throw new Exception("Node shouldn't exist"); counter = (counter + 1) % paths.length; } }