On Friday 11 January 2008 23:06, robert at freenetproject.org wrote:
> Author: robert
> Date: 2008-01-11 23:06:54 +0000 (Fri, 11 Jan 2008)
> New Revision: 17020
>
> Modified:
> trunk/freenet/src/freenet/node/MessageItem.java
> trunk/freenet/src/freenet/node/PeerNode.java
> Log:
> implement simple queue priorities (does not affect coalescing delays)
>
>
> Modified: trunk/freenet/src/freenet/node/MessageItem.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/MessageItem.java 2008-01-11 21:20:36 UTC
(rev 17019)
> +++ trunk/freenet/src/freenet/node/MessageItem.java 2008-01-11 23:06:54 UTC
(rev 17020)
> @@ -72,4 +72,8 @@
> }
> }
> }
> +
> + public short getPriority() {
> + return msg.getSpec().getPriority();
> + }
> }
Can NPE. Not all MessageItem's have an msg. Some have a whole retransmittable
packet.
>
> Modified: trunk/freenet/src/freenet/node/PeerNode.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/PeerNode.java 2008-01-11 21:20:36 UTC
(rev 17019)
> +++ trunk/freenet/src/freenet/node/PeerNode.java 2008-01-11 23:06:54 UTC
(rev 17020)
> @@ -16,6 +16,7 @@
> import java.util.Hashtable;
> import java.util.Iterator;
> import java.util.LinkedList;
> +import java.util.ListIterator;
> import java.util.Vector;
> import java.util.zip.DataFormatException;
> import java.util.zip.Inflater;
> @@ -951,7 +952,7 @@
> reportBackoffStatus(now);
> int x = 0;
> synchronized(messagesToSendNow) {
> - messagesToSendNow.addLast(item);
> + enqueuePrioritizedMessageItem(item);
> Iterator i = messagesToSendNow.iterator();
> for(; i.hasNext();) {
> MessageItem it = (MessageItem) (i.next());
> @@ -981,6 +982,20 @@
> return x;
> }
>
> + private void enqueuePrioritizedMessageItem(MessageItem addMe) {
> + synchronized (messagesToSendNow) {
> + //Assume it goes on the end, both the common case and
> an accelerator for
requeueing.
> + ListIterator
> i=messagesToSendNow.listIterator(messagesToSendNow.size());
> + while (i.hasPrevious()) {
> + MessageItem here=(MessageItem)i.previous();
> + //While the item we are adding is a HIGHER
> priority, move on
(backwards...)
> + if (!(addMe.getPriority() < here.getPriority()))
> + break;
> + }
> + i.add(addMe);
> + }
> + }
Probably better to have separate queues, maybe an array of queues.
> +
> /**
> * Returns the number of milliseconds that it is estimated to take to
transmit the currently queued packets.
> */
> @@ -1169,7 +1184,7 @@
> synchronized(messagesToSendNow) {
> for(int i = offset; i < offset + length; i++)
> if(messages[i] != null)
> - messagesToSendNow.add(messages[i]);
> +
> enqueuePrioritizedMessageItem(messages[i]);
> }
> }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20080112/4a5dbff0/attachment.pgp>