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;
}