[freenet-dev] [freenet-cvs] r17020 - trunk/freenet/src/freenet/node

Matthew Toseland toad at amphibian.dyndns.org
Sat Jan 12 21:30:38 UTC 2008


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 : http://emu.freenetproject.org/pipermail/devl/attachments/20080112/4a5dbff0/attachment.pgp 


More information about the Devl mailing list