Author: toad
Date: 2006-04-07 17:52:16 +0000 (Fri, 07 Apr 2006)
New Revision: 8495

Modified:
   trunk/freenet/src/freenet/node/MessageItem.java
   trunk/freenet/src/freenet/node/PacketSender.java
   trunk/freenet/src/freenet/node/Version.java
Log:
625: Delay messages by up to 100ms in order to coalesce a bit.

Modified: trunk/freenet/src/freenet/node/MessageItem.java
===================================================================
--- trunk/freenet/src/freenet/node/MessageItem.java     2006-04-07 17:10:34 UTC 
(rev 8494)
+++ trunk/freenet/src/freenet/node/MessageItem.java     2006-04-07 17:52:16 UTC 
(rev 8495)
@@ -8,6 +8,7 @@
     final Message msg;
     byte[] buf;
     final AsyncMessageCallback[] cb;
+    final long submitted;
     /** If true, the buffer may contain several messages, and is formatted
      * for sending as a single packet.
      */
@@ -18,6 +19,7 @@
         this.cb = cb2;
         buf = null;
         formatted = false;
+        this.submitted = System.currentTimeMillis();
     }

     public MessageItem(byte[] data, AsyncMessageCallback[] cb2, boolean 
formatted) {
@@ -25,6 +27,7 @@
         this.msg = null;
         this.buf = data;
         this.formatted = formatted;
+        this.submitted = System.currentTimeMillis();
     }

     /**

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-04-07 17:10:34 UTC 
(rev 8494)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-04-07 17:52:16 UTC 
(rev 8495)
@@ -125,13 +125,26 @@
                 // Any messages to send?
                 MessageItem[] messages = null;
                 messages = pn.grabQueuedMessageItems();
-                if(messages != null) {
+                if(messages != null && messages.length > 0) {
+                       long l = Long.MAX_VALUE;
+                       int sz = 56; // overhead; FIXME should be a constant or 
something
                        for(int j=0;j<messages.length;j++) {
-                               Logger.minor(this, "PS Sending: 
"+(messages[j].msg == null ? "(not a Message)" : 
messages[j].msg.getSpec().getName()));
+                               if(l > messages[j].submitted) l = 
messages[j].submitted;
+                               sz += 2 + /* FIXME only 2? */ 
messages[j].getData(node.packetMangler, pn).length;
                        }
-                    // Send packets, right now, blocking, including any active 
notifications
-                    node.packetMangler.processOutgoingOrRequeue(messages, pn, 
true);
-                    continue;
+                       if(l + 100 > now && sz < 1024) {
+                               // Don't send immediately
+                               if(nextActionTime > (l+100))
+                                       nextActionTime = l+100;
+                               pn.requeueMessageItems(messages, 0, 
messages.length, true);
+                       } else {
+                               for(int j=0;j<messages.length;j++) {
+                                       Logger.minor(this, "PS Sending: 
"+(messages[j].msg == null ? "(not a Message)" : 
messages[j].msg.getSpec().getName()));
+                               }
+                               // Send packets, right now, blocking, including 
any active notifications
+                               
node.packetMangler.processOutgoingOrRequeue(messages, pn, true);
+                               continue;
+                       }
                 }

                 // Need to send a keepalive packet?

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-04-07 17:10:34 UTC (rev 
8494)
+++ trunk/freenet/src/freenet/node/Version.java 2006-04-07 17:52:16 UTC (rev 
8495)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 624;
+       private static final int buildNumber = 625;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 591;


Reply via email to