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;