Author: mrogers
Date: 2006-10-31 14:33:19 +0000 (Tue, 31 Oct 2006)
New Revision: 10753

Added:
   trunk/apps/load-balancing-sims/phase7/sim/generators/SimplePublisher.java
Log:
Hangs mysteriously

Added: trunk/apps/load-balancing-sims/phase7/sim/generators/SimplePublisher.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/generators/SimplePublisher.java   
2006-10-31 14:32:55 UTC (rev 10752)
+++ trunk/apps/load-balancing-sims/phase7/sim/generators/SimplePublisher.java   
2006-10-31 14:33:19 UTC (rev 10753)
@@ -0,0 +1,56 @@
+// A simple publisher that inserts CHKs using a Poisson process and informs
+// each reader of each key after an average of one minute
+
+package sim.generators;
+import sim.Event;
+import sim.EventTarget;
+import sim.Node;
+import java.util.HashSet;
+
+public class SimplePublisher implements EventTarget
+{
+       public final double rate; // Inserts per second
+       private Node node; // The publisher's node
+       private HashSet<Node> readers; // The readers' nodes
+       
+       public SimplePublisher (double rate, Node node)
+       {
+               this.rate = rate;
+               this.node = node;
+               readers = new HashSet<Node>();
+               // Schedule the first insert
+               double delay = -Math.log (Math.random()) / rate;
+               Event.schedule (this, delay, INSERT_CHK, null);
+       }
+       
+       public boolean addReader (Node n)
+       {
+               return readers.add (n);
+       }
+       
+       // Event callbacks
+       
+       private void insertChk()
+       {
+               // Insert a random key
+               int key = Node.locationToKey (Math.random());
+               Event.schedule (node, 0.0, Node.INSERT_CHK, key);
+               // Inform each reader after an average of one minute
+               for (Node n : readers) {
+                       double delay = -Math.log (Math.random()) * 60.0;
+                       Event.schedule (n, delay, Node.REQUEST_CHK, key);
+               }
+               // Schedule the next insert
+               double delay = -Math.log (Math.random()) / rate;
+               Event.schedule (this, delay, INSERT_CHK, null);
+       }
+       
+       // EventTarget interface
+       
+       public void handleEvent (int type, Object data)
+       {
+               if (type == INSERT_CHK) insertChk();
+       }
+       
+       private final static int INSERT_CHK = 1;
+}


Reply via email to