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()


Reply via email to