Author: mrogers
Date: 2006-12-13 14:03:48 +0000 (Wed, 13 Dec 2006)
New Revision: 11370

Added:
   trunk/apps/load-balancing-sims/phase7/sim/generators/Client.java
Modified:
   trunk/apps/load-balancing-sims/phase7/sim/Node.java
   trunk/apps/load-balancing-sims/phase7/sim/generators/SimplePublisher.java
   trunk/apps/load-balancing-sims/phase7/sim/messages/ChkInsert.java
   trunk/apps/load-balancing-sims/phase7/sim/messages/ChkRequest.java
   trunk/apps/load-balancing-sims/phase7/sim/messages/Search.java
   trunk/apps/load-balancing-sims/phase7/sim/messages/SskInsert.java
   trunk/apps/load-balancing-sims/phase7/sim/messages/SskRequest.java
Log:
Don't inform the readers until the insert starts (plus ten minutes)

Modified: trunk/apps/load-balancing-sims/phase7/sim/Node.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/Node.java 2006-12-13 09:46:24 UTC 
(rev 11369)
+++ trunk/apps/load-balancing-sims/phase7/sim/Node.java 2006-12-13 14:03:48 UTC 
(rev 11370)
@@ -1,4 +1,5 @@
 package sim;
+import sim.generators.Client;
 import sim.handlers.*;
 import sim.messages.*;
 import java.util.HashMap;
@@ -544,6 +545,8 @@
                        return;
                }
                Search s = searchQueue.poll();
+               // Inform the client that the search has left the queue
+               if (s.client != null) s.client.searchStarted (s);
                if (s instanceof ChkRequest)
                        handleChkRequest ((ChkRequest) s, null);
                else if (s instanceof ChkInsert) {
@@ -587,9 +590,9 @@
                addToSearchQueue (cr);
        }

-       public void generateChkInsert (int key)
+       public void generateChkInsert (int key, Client c)
        {
-               ChkInsert ci = new ChkInsert (key, location);
+               ChkInsert ci = new ChkInsert (key, location, c);
                if (LOG) log ("generating " + ci);
                addToSearchQueue (ci);
        }
@@ -601,9 +604,9 @@
                addToSearchQueue (sr);
        }

-       public void generateSskInsert (int key, int value)
+       public void generateSskInsert (int key, int value, Client c)
        {
-               SskInsert si = new SskInsert (key, value, location);
+               SskInsert si = new SskInsert (key, value, location, c);
                if (LOG) log ("generating " + si);
                addToSearchQueue (si);
        }
@@ -639,7 +642,7 @@
                        break;

                        case INSERT_CHK:
-                       generateChkInsert ((Integer) data);
+                       generateChkInsert ((Integer) data, null);
                        break;

                        case REQUEST_SSK:
@@ -647,11 +650,11 @@
                        break;

                        case INSERT_SSK:
-                       generateSskInsert ((Integer) data, 0);
+                       generateSskInsert ((Integer) data, 0, null);
                        break;

                        case SSK_COLLISION:
-                       generateSskInsert ((Integer) data, 1);
+                       generateSskInsert ((Integer) data, 1, null);
                        break;

                        case CHECK_TIMEOUTS:

Added: trunk/apps/load-balancing-sims/phase7/sim/generators/Client.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/generators/Client.java            
                (rev 0)
+++ trunk/apps/load-balancing-sims/phase7/sim/generators/Client.java    
2006-12-13 14:03:48 UTC (rev 11370)
@@ -0,0 +1,7 @@
+package sim.generators;
+import sim.messages.Search;
+
+public interface Client
+{
+       public void searchStarted (Search s); // Callback
+}

Modified: 
trunk/apps/load-balancing-sims/phase7/sim/generators/SimplePublisher.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/generators/SimplePublisher.java   
2006-12-13 09:46:24 UTC (rev 11369)
+++ trunk/apps/load-balancing-sims/phase7/sim/generators/SimplePublisher.java   
2006-12-13 14:03:48 UTC (rev 11370)
@@ -5,9 +5,10 @@
 import sim.Event;
 import sim.EventTarget;
 import sim.Node;
+import sim.messages.*;
 import java.util.HashSet;

-public class SimplePublisher implements EventTarget
+public class SimplePublisher implements Client, EventTarget
 {
        // FIXME: what fraction of keys are CHKs in real life?
        private final static double FRACTION_CHKS = 0.5;
@@ -44,12 +45,7 @@
        {
                // Insert a random key
                int key = Node.locationToKey (Math.random());
-               node.generateChkInsert (key);
-               // Inform each reader after an average of ten minutes
-               for (Node n : readers) {
-                       double delay = 595.0 + Math.random() * 10.0;
-                       Event.schedule (n, delay, Node.REQUEST_CHK, key);
-               }
+               node.generateChkInsert (key, this);
                // Schedule the next insert after an exp. distributed delay
                if (inserts > 0 && --inserts == 0) return;
                double delay = -Math.log (Math.random()) / rate;
@@ -60,18 +56,27 @@
        {
                // Insert a random key
                int key = Node.locationToKey (Math.random());
-               node.generateSskInsert (key, 0);
-               // Inform each reader after an average of ten minutes
-               for (Node n : readers) {
-                       double delay = 595.0 + Math.random() * 10.0;
-                       Event.schedule (n, delay, Node.REQUEST_SSK, key);
-               }
+               node.generateSskInsert (key, 0, this);
                // Schedule the next insert after an exp. distributed delay
                if (inserts > 0 && --inserts == 0) return;
                double delay = -Math.log (Math.random()) / rate;
                Event.schedule (this, delay, PUBLISH, null);
        }

+       // Client interface
+       
+       public void searchStarted (Search s)
+       {
+               // Inform each reader after an average of ten minutes
+               for (Node n : readers) {
+                       double d = 595.0 + Math.random() * 10.0;
+                       if (s instanceof ChkInsert)
+                               Event.schedule (n, d, Node.REQUEST_CHK, s.key);
+                       else if (s instanceof SskInsert)
+                               Event.schedule (n, d, Node.REQUEST_SSK, s.key);
+               }
+       }
+       
        // EventTarget interface

        public void handleEvent (int type, Object data)

Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/ChkInsert.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/messages/ChkInsert.java   
2006-12-13 09:46:24 UTC (rev 11369)
+++ trunk/apps/load-balancing-sims/phase7/sim/messages/ChkInsert.java   
2006-12-13 14:03:48 UTC (rev 11370)
@@ -1,11 +1,12 @@
 package sim.messages;
+import sim.generators.Client;

 public class ChkInsert extends Search
 {
        // Start a new insert
-       public ChkInsert (int key, double location)
+       public ChkInsert (int key, double location, Client client)
        {
-               super (key, location);
+               super (key, location, client);
        }

        // Forward an insert

Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/ChkRequest.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/messages/ChkRequest.java  
2006-12-13 09:46:24 UTC (rev 11369)
+++ trunk/apps/load-balancing-sims/phase7/sim/messages/ChkRequest.java  
2006-12-13 14:03:48 UTC (rev 11370)
@@ -5,7 +5,7 @@
        // Start a new request
        public ChkRequest (int key, double location)
        {
-               super (key, location);
+               super (key, location, null);
        }

        // Forward a request

Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/Search.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/messages/Search.java      
2006-12-13 09:46:24 UTC (rev 11369)
+++ trunk/apps/load-balancing-sims/phase7/sim/messages/Search.java      
2006-12-13 14:03:48 UTC (rev 11370)
@@ -1,4 +1,5 @@
 package sim.messages;
+import sim.generators.Client;

 public class Search extends Message
 {
@@ -7,14 +8,16 @@
        public final int key; // The target of the search
        public double closest; // The closest location seen so far
        public int htl; // Hops to live for backtracking
+       public Client client; // Stored here for convenience

        // Start a new search
-       public Search (int key, double location)
+       public Search (int key, double location, Client client)
        {
                id = Message.nextId++;
                this.key = key;
                closest = location;
                htl = MAX_HTL;
+               this.client = client;
        }

        // Forward a search
@@ -24,6 +27,7 @@
                this.key = key;
                this.closest = closest;
                this.htl = htl;
+               client = null;
        }

        public int size()

Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/SskInsert.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/messages/SskInsert.java   
2006-12-13 09:46:24 UTC (rev 11369)
+++ trunk/apps/load-balancing-sims/phase7/sim/messages/SskInsert.java   
2006-12-13 14:03:48 UTC (rev 11370)
@@ -1,13 +1,14 @@
 package sim.messages;
+import sim.generators.Client;

 public class SskInsert extends Search
 {
        public final int data;

        // Start a new insert
-       public SskInsert (int key, int data, double location)
+       public SskInsert (int key, int data, double location, Client client)
        {
-               super (key, location);
+               super (key, location, client);
                this.data = data;
        }


Modified: trunk/apps/load-balancing-sims/phase7/sim/messages/SskRequest.java
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/messages/SskRequest.java  
2006-12-13 09:46:24 UTC (rev 11369)
+++ trunk/apps/load-balancing-sims/phase7/sim/messages/SskRequest.java  
2006-12-13 14:03:48 UTC (rev 11370)
@@ -7,7 +7,7 @@
        // Start a new request
        public SskRequest (int key, double location, boolean needPubKey)
        {
-               super (key, location);
+               super (key, location, null);
                this.needPubKey = needPubKey;
        }



Reply via email to