package lsr.leader; import java.util.Arrays; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import lsr.common.Configuration; import lsr.common.ProcessDescriptor; import lsr.common.SingleThreadDispatcher; import lsr.leader.latency.LatencyDetector; import lsr.leader.latency.LatencyDetectorListener; import lsr.leader.latency.SimpleLatencyDetector; import lsr.paxos.network.UdpNetwork; /** * Simple demo for the local latency detector * * @author Donz� Benjamin * */ public class LatencyDetectorDemo implements LatencyDetectorListener { private final LatencyDetector latencyDetector; public LatencyDetectorDemo(Configuration config, int localId) throws Exception { ProcessDescriptor p = new ProcessDescriptor(config, localId); // Use UDP to send the leader election messages UdpNetwork network = new UdpNetwork(p); SingleThreadDispatcher executor = new SingleThreadDispatcher("Leader"); // Create the latency detector latencyDetector = new SimpleLatencyDetector(p, network, executor); latencyDetector.registerLatencyDetectorListener(this); // Start the oracle latencyDetector.start(); _logger.info("Latency detector started"); executor.schedule(new Runnable() { @Override public void run() { try { latencyDetector.stop(); } catch (Exception e) { e.printStackTrace(); } } }, 30, TimeUnit.SECONDS); executor.schedule(new Runnable() { @Override public void run() { try { latencyDetector.start(); } catch (Exception e) { e.printStackTrace(); } } }, 45, TimeUnit.SECONDS); } public static void main(String[] args) throws Exception { if (args.length != 1) { usage(); System.exit(1); } int localID = Integer.parseInt(args[0]); Configuration p = new Configuration(); // LatencyDetectorDemo tester = new LatencyDetectorDemo(p, localID); } @Override public void onNewRTTVector(double[] rttVector) { System.out.println("New RTT vector: " + Arrays.toString(rttVector)); } private static void usage() { System.out.println( "Invalid arguments. Usage:\n" + " java lsr.leader.latency.LatencyDetectorDemo <replicaID>"); } private final static Logger _logger = Logger.getLogger(LatencyDetectorDemo.class.getCanonicalName()); }