Author: mrogers
Date: 2006-10-15 09:23:35 +0000 (Sun, 15 Oct 2006)
New Revision: 10662
Added:
trunk/apps/load-balancing-sims/phase6/messages/Ack.java
Removed:
trunk/apps/load-balancing-sims/phase6/AckQueue.java
Modified:
trunk/apps/load-balancing-sims/phase6/DeadlineQueue.java
trunk/apps/load-balancing-sims/phase6/Packet.java
trunk/apps/load-balancing-sims/phase6/Peer.java
trunk/apps/load-balancing-sims/phase6/messages/Accepted.java
trunk/apps/load-balancing-sims/phase6/messages/Block.java
trunk/apps/load-balancing-sims/phase6/messages/ChkDataFound.java
trunk/apps/load-balancing-sims/phase6/messages/DataInsert.java
trunk/apps/load-balancing-sims/phase6/messages/DataNotFound.java
trunk/apps/load-balancing-sims/phase6/messages/InsertReply.java
trunk/apps/load-balancing-sims/phase6/messages/Message.java
trunk/apps/load-balancing-sims/phase6/messages/RejectedLoop.java
trunk/apps/load-balancing-sims/phase6/messages/RouteNotFound.java
trunk/apps/load-balancing-sims/phase6/messages/Search.java
trunk/apps/load-balancing-sims/phase6/messages/SskAccepted.java
trunk/apps/load-balancing-sims/phase6/messages/SskDataFound.java
trunk/apps/load-balancing-sims/phase6/messages/SskInsert.java
trunk/apps/load-balancing-sims/phase6/messages/SskPubKey.java
trunk/apps/load-balancing-sims/phase6/messages/TransfersCompleted.java
Log:
Fun with polymorphism
Deleted: trunk/apps/load-balancing-sims/phase6/AckQueue.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/AckQueue.java 2006-10-14 11:57:08 UTC
(rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/AckQueue.java 2006-10-15 09:23:35 UTC
(rev 10662)
@@ -1,32 +0,0 @@
-// A queue storing outgoing acks and their coalescing deadlines
-
-import java.util.LinkedList;
-
-class AckQueue
-{
- public int size = 0; // Size in bytes
- private LinkedList<Integer> acks = new LinkedList<Integer>();
- private LinkedList<Double> deadlines = new LinkedList<Double>();
-
- public void add (int ack, double deadline)
- {
- size += Packet.ACK_SIZE;
- acks.add (ack);
- deadlines.add (deadline);
- }
-
- public double deadline()
- {
- Double deadline = deadlines.peek();
- if (deadline == null) return Double.POSITIVE_INFINITY;
- else return deadline;
- }
-
- public Integer pop()
- {
- deadlines.poll();
- Integer ack = acks.poll();
- if (ack != null) size -= Packet.ACK_SIZE;
- return ack;
- }
-}
Modified: trunk/apps/load-balancing-sims/phase6/DeadlineQueue.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/DeadlineQueue.java 2006-10-14
11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/DeadlineQueue.java 2006-10-15
09:23:35 UTC (rev 10662)
@@ -3,15 +3,15 @@
import java.util.LinkedList;
import messages.Message;
-class DeadlineQueue
+class DeadlineQueue<MESSAGE extends Message>
{
public int size = 0; // Size in bytes
- private LinkedList<Message> messages = new LinkedList<Message>();
+ private LinkedList<MESSAGE> messages = new LinkedList<MESSAGE>();
private LinkedList<Double> deadlines = new LinkedList<Double>();
- public void add (Message m, double deadline)
+ public void add (MESSAGE m, double deadline)
{
- size += m.size;
+ size += m.size();
messages.add (m);
deadlines.add (deadline);
}
@@ -19,7 +19,7 @@
public int headSize()
{
if (messages.isEmpty()) return 0;
- else return messages.peek().size;
+ else return messages.peek().size();
}
public double deadline()
@@ -29,11 +29,11 @@
else return deadline;
}
- public Message pop()
+ public MESSAGE pop()
{
deadlines.poll();
- Message m = messages.poll();
- if (m != null) size -= m.size;
+ MESSAGE m = messages.poll();
+ if (m != null) size -= m.size();
return m;
}
}
Modified: trunk/apps/load-balancing-sims/phase6/Packet.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/Packet.java 2006-10-14 11:57:08 UTC
(rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/Packet.java 2006-10-15 09:23:35 UTC
(rev 10662)
@@ -2,6 +2,7 @@
import java.util.ArrayList;
import messages.Message;
+import messages.Ack;
class Packet
{
@@ -13,24 +14,24 @@
public int src, dest; // Network addresses
public int size = HEADER_SIZE; // Size in bytes, including headers
public int seq = -1; // Data sequence number (-1 if no data)
- public ArrayList<Integer> acks = null;
+ public ArrayList<Ack> acks = null;
public ArrayList<Message> messages = null;
public double sent; // Time at which the packet was (re) transmitted
public double latency; // Link latency (stored here for convenience)
- public void addAck (Integer ack)
+ public void addAck (Ack a)
{
- if (acks == null) acks = new ArrayList<Integer>();
- acks.add (ack);
- size += ACK_SIZE;
+ if (acks == null) acks = new ArrayList<Ack>();
+ acks.add (a);
+ size += a.size();
}
public void addMessage (Message m)
{
if (messages == null) messages = new ArrayList<Message>();
messages.add (m);
- size += m.size;
+ size += m.size();
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/Peer.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/Peer.java 2006-10-14 11:57:08 UTC
(rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/Peer.java 2006-10-15 09:23:35 UTC
(rev 10662)
@@ -3,6 +3,7 @@
import java.util.HashSet;
import messages.Message;
import messages.Block;
+import messages.Ack;
class Peer
{
@@ -28,9 +29,9 @@
private int txSeq = 0; // Sequence number of next outgoing data packet
private int txMaxSeq = SEQ_RANGE - 1; // Highest sequence number
private LinkedList<Packet> txBuffer; // Retransmission buffer
- private AckQueue ackQueue; // Outgoing acks
- private DeadlineQueue searchQueue; // Outgoing search messages
- private DeadlineQueue transferQueue; // Outgoing transfers
+ private DeadlineQueue<Ack> ackQueue; // Outgoing acks
+ private DeadlineQueue<Message> searchQueue; // Outgoing search messages
+ private DeadlineQueue<Block> transferQueue; // Outgoing transfers
private CongestionWindow window; // AIMD congestion window
private double lastTransmission = 0.0; // Clock time
private boolean tgif = false; // "Transfers go in first" toggle
@@ -46,9 +47,9 @@
this.location = location;
this.latency = latency;
txBuffer = new LinkedList<Packet>();
- ackQueue = new AckQueue();
- searchQueue = new DeadlineQueue();
- transferQueue = new DeadlineQueue();
+ ackQueue = new DeadlineQueue<Ack>();
+ searchQueue = new DeadlineQueue<Message>();
+ transferQueue = new DeadlineQueue<Block>();
window = new CongestionWindow (this);
rxDupe = new HashSet<Integer>();
}
@@ -58,7 +59,7 @@
{
if (m instanceof Block) {
log (m + " added to transfer queue");
- transferQueue.add (m, Event.time() + MAX_DELAY);
+ transferQueue.add ((Block) m, Event.time() + MAX_DELAY);
}
else {
log (m + " added to search queue");
@@ -74,7 +75,7 @@
private void sendAck (int seq)
{
log ("ack " + seq + " added to ack queue");
- ackQueue.add (seq, Event.time() + MAX_DELAY);
+ ackQueue.add (new Ack (seq), Event.time() + MAX_DELAY);
// Start the node's timer if necessary
node.startTimer();
// Send as many packets as possible
@@ -145,7 +146,7 @@
public void handlePacket (Packet p)
{
if (p.messages != null) handleData (p);
- if (p.acks != null) for (int ack : p.acks) handleAck (ack);
+ if (p.acks != null) for (Ack a : p.acks) handleAck (a);
}
private void handleData (Packet p)
@@ -175,16 +176,17 @@
else log ("warning: received " + p.seq + " before " + rxSeq);
}
- private void handleAck (int ack)
+ private void handleAck (Ack a)
{
- log ("received ack " + ack);
+ int seq = a.id;
+ log ("received ack " + seq);
double now = Event.time();
Iterator<Packet> i = txBuffer.iterator();
while (i.hasNext()) {
Packet p = i.next();
double age = now - p.sent;
// Explicit ack
- if (p.seq == ack) {
+ if (p.seq == seq) {
log ("packet " + p.seq + " acknowledged");
i.remove();
// Update the congestion window
@@ -196,7 +198,7 @@
break;
}
// Fast retransmission
- if (p.seq < ack && age > FRTO * rtt + MAX_DELAY) {
+ if (p.seq < seq && age > FRTO * rtt + MAX_DELAY) {
p.sent = now;
log ("fast retransmitting packet " + p.seq);
node.net.send (p, address, latency);
@@ -306,7 +308,7 @@
public void log (String message)
{
- // Event.log (node.net.address + ":" + address + " " + message);
+ Event.log (node.net.address + ":" + address + " " + message);
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/messages/Accepted.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/Accepted.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/Accepted.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -5,7 +5,6 @@
public Accepted (int id)
{
this.id = id;
- size = Message.HEADER_SIZE;
}
public String toString()
Added: trunk/apps/load-balancing-sims/phase6/messages/Ack.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/Ack.java 2006-10-14
11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/Ack.java 2006-10-15
09:23:35 UTC (rev 10662)
@@ -0,0 +1,14 @@
+package messages;
+
+public class Ack extends Message
+{
+ public Ack (int seq)
+ {
+ id = seq; // Space-saving hack
+ }
+
+ public int size()
+ {
+ return ACK_SIZE;
+ }
+}
Modified: trunk/apps/load-balancing-sims/phase6/messages/Block.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/Block.java 2006-10-14
11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/Block.java 2006-10-15
09:23:35 UTC (rev 10662)
@@ -10,9 +10,13 @@
{
this.id = id;
this.index = index;
- size = Message.HEADER_SIZE + Message.DATA_SIZE;
}
+ public int size()
+ {
+ return HEADER_SIZE + DATA_SIZE;
+ }
+
public String toString()
{
return new String ("block (" + id + "," + index + ")");
Modified: trunk/apps/load-balancing-sims/phase6/messages/ChkDataFound.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/ChkDataFound.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/ChkDataFound.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -5,7 +5,6 @@
public ChkDataFound (int id)
{
this.id = id;
- size = Message.HEADER_SIZE;
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/messages/DataInsert.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/DataInsert.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/DataInsert.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -5,7 +5,6 @@
public DataInsert (int id)
{
this.id = id;
- size = Message.HEADER_SIZE;
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/messages/DataNotFound.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/DataNotFound.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/DataNotFound.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -5,7 +5,6 @@
public DataNotFound (int id)
{
this.id = id;
- size = Message.HEADER_SIZE;
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/messages/InsertReply.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/InsertReply.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/InsertReply.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -5,7 +5,6 @@
public InsertReply (int id)
{
this.id = id;
- size = Message.HEADER_SIZE;
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/messages/Message.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/Message.java 2006-10-14
11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/Message.java 2006-10-15
09:23:35 UTC (rev 10662)
@@ -8,9 +8,15 @@
public final static int KEY_SIZE = 32; // Size of a routing key, bytes
public final static int PUB_KEY_SIZE = 1024; // Size of a pub key, bytes
public final static int DATA_SIZE = 1024; // Size of a data block, bytes
+ public final static int ACK_SIZE = 4; // Size of a sequence num, bytes
public static int nextId = 0; // Each request and insert has a unique ID
- public int size; // Size in bytes
public int id; // Unique request ID
+
+ // Override this
+ public int size()
+ {
+ return HEADER_SIZE;
+ }
}
Modified: trunk/apps/load-balancing-sims/phase6/messages/RejectedLoop.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/RejectedLoop.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/RejectedLoop.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -5,7 +5,6 @@
public RejectedLoop (int id)
{
this.id = id;
- size = Message.HEADER_SIZE;
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/messages/RouteNotFound.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/RouteNotFound.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/RouteNotFound.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -8,7 +8,6 @@
{
this.id = id;
this.htl = htl;
- size = Message.HEADER_SIZE;
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/messages/Search.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/Search.java 2006-10-14
11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/Search.java 2006-10-15
09:23:35 UTC (rev 10662)
@@ -15,7 +15,6 @@
this.key = key;
closest = location;
htl = MAX_HTL;
- size = Message.HEADER_SIZE + Message.KEY_SIZE;
}
// Forward a search
@@ -25,9 +24,13 @@
this.key = key;
this.closest = closest;
this.htl = htl;
- size = Message.HEADER_SIZE + Message.KEY_SIZE;
}
+ public int size()
+ {
+ return HEADER_SIZE + KEY_SIZE;
+ }
+
public String toString()
{
return new String ("search (" +id+ "," +key+ "," +htl+ ")");
Modified: trunk/apps/load-balancing-sims/phase6/messages/SskAccepted.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/SskAccepted.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/SskAccepted.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -8,7 +8,6 @@
{
this.id = id;
this.needPubKey = needPubKey;
- size = Message.HEADER_SIZE;
}
public String toString()
Modified: trunk/apps/load-balancing-sims/phase6/messages/SskDataFound.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/SskDataFound.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/SskDataFound.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -8,9 +8,13 @@
{
this.id = id;
this.data = data;
- size = Message.HEADER_SIZE + Message.DATA_SIZE;
}
+ public int size()
+ {
+ return HEADER_SIZE + DATA_SIZE;
+ }
+
public String toString()
{
return new String ("SSK data found (" + id + "," + data + ")");
Modified: trunk/apps/load-balancing-sims/phase6/messages/SskInsert.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/SskInsert.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/SskInsert.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -9,7 +9,6 @@
{
super (key, location);
this.data = data;
- size += DATA_SIZE;
}
// Forward an insert
@@ -17,9 +16,13 @@
{
super (id, key, closest, htl);
this.data = data;
- size += DATA_SIZE;
}
+ public int size()
+ {
+ return HEADER_SIZE + KEY_SIZE + DATA_SIZE;
+ }
+
public String toString()
{
return new String ("SSK insert (" +id+ "," +key+ "," +data+")");
Modified: trunk/apps/load-balancing-sims/phase6/messages/SskPubKey.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/SskPubKey.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/SskPubKey.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -8,9 +8,13 @@
{
this.id = id;
this.key = key;
- size = Message.HEADER_SIZE + Message.PUB_KEY_SIZE;
}
+ public int size()
+ {
+ return HEADER_SIZE + PUB_KEY_SIZE;
+ }
+
public String toString()
{
return new String ("SSK public key (" + id + "," + key + ")");
Modified: trunk/apps/load-balancing-sims/phase6/messages/TransfersCompleted.java
===================================================================
--- trunk/apps/load-balancing-sims/phase6/messages/TransfersCompleted.java
2006-10-14 11:57:08 UTC (rev 10661)
+++ trunk/apps/load-balancing-sims/phase6/messages/TransfersCompleted.java
2006-10-15 09:23:35 UTC (rev 10662)
@@ -5,7 +5,6 @@
public TransfersCompleted (int id)
{
this.id = id;
- size = Message.HEADER_SIZE;
}
public String toString()