Skip to content
Snippets Groups Projects
REZKTestClientExists.java 1.43 KiB
Newer Older
  • Learn to ignore specific revisions
  • Michael Eischer's avatar
    Michael Eischer committed
    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);
    				}
    			}
    		}
    
    
    Michael Eischer's avatar
    Michael Eischer committed
    		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;
    	}
    }