[freenet-dev] [freenet-cvs] r16997 - in trunk/freenet/src/freenet/io: comm xfer

Matthew Toseland toad at amphibian.dyndns.org
Sat Jan 12 20:12:08 UTC 2008


On Thursday 10 January 2008 19:23, robert at freenetproject.org wrote:
> Author: robert
> Date: 2008-01-10 19:23:00 +0000 (Thu, 10 Jan 2008)
> New Revision: 16997
> 
> Modified:
>    trunk/freenet/src/freenet/io/comm/RetrievalException.java
>    trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
> Log:
> tell the reciever if we are not transmitting anymore, and why
> 
> 
> Modified: trunk/freenet/src/freenet/io/comm/RetrievalException.java
> ===================================================================
> --- trunk/freenet/src/freenet/io/comm/RetrievalException.java	2008-01-10 
19:19:20 UTC (rev 16996)
> +++ trunk/freenet/src/freenet/io/comm/RetrievalException.java	2008-01-10 
19:23:00 UTC (rev 16997)
> @@ -40,6 +40,7 @@
>      public static final int NO_DATAINSERT = 8;
>      public static final int CANCELLED_BY_RECEIVER = 9;
>  	public static final int RANGE_UNSUPPORTED = 10; //was 4
> +	public static final int RECEIVER_DIED = 11;
>  	
>  	int _reason;
>  	String _cause;
> @@ -50,7 +51,7 @@
>  	}
>  	
>  	public RetrievalException(int reason, String cause) {
> -		this(reason);
> +		_reason = reason;
>  		_cause = cause;
>  		if (cause==null || cause.length()==0 || cause.equals("null"))
>  			_cause=getErrString(reason);
> 
> Modified: trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
> ===================================================================
> --- trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java	2008-01-10 
19:19:20 UTC (rev 16996)
> +++ trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java	2008-01-10 
19:23:00 UTC (rev 16997)
> @@ -30,6 +30,7 @@
>  import freenet.io.comm.MessageFilter;
>  import freenet.io.comm.NotConnectedException;
>  import freenet.io.comm.PeerContext;
> +import freenet.io.comm.RetrievalException;
>  import freenet.node.PeerNode;
>  import freenet.support.BitArray;
>  import freenet.support.DoubleTokenBucket;
> @@ -208,6 +209,7 @@
>  						_sendComplete = true;
>  						_senderThread.notifyAll();	
>  					}
> +					sendAborted(_prb.getAbortedReason(), "Downstream transfer failed");
>  					return false;
>  				}
>  				Message msg;
> @@ -219,20 +221,20 @@
>  					msg = 
_usm.waitFor(mfMissingPacketNotification.or(mfAllReceived.or(mfSendAborted)), 
_ctr);
>  					if(logMINOR) Logger.minor(this, "Got "+msg);
>  				} catch (DisconnectedException e) {
> -					// Ignore, see below
> -					msg = null;
> -				}
> -				if(logMINOR) Logger.minor(this, "Got "+msg);
> -				if(!_destination.isConnected()) {
>  					Logger.normal(this, "Terminating send "+_uid+" to "+_destination+" 
from "+_destination.getSocketHandler()+" because node disconnected while 
waiting");
>  					synchronized(_senderThread) {
>  						_sendComplete = true;
>  						_senderThread.notifyAll();
>  					}
> +					//They disconnected, can't send an abort to them then can we?
>  					return false;
>  				}

Is this part (above) an improvement?

> -				if(_sendComplete)
> +				if(logMINOR) Logger.minor(this, "Got "+msg);
> +				if(_sendComplete) {
> +					Logger.normal(this, "send cancelled by _senderThread");
> +					//_senderThread will have sent an aborted message
>  					return false;
> +				}
>  				if (msg == null) {
>  					long now = System.currentTimeMillis();
>  					//SEND_TIMEOUT (one minute) after all packets have been transmitted, 
terminate the send.
> @@ -242,7 +244,9 @@
>  							_sendComplete = true;
>  							_senderThread.notifyAll();
>  						}
> -						Logger.error(this, "Terminating send "+_uid+" to "+_destination+" 
from "+_destination.getSocketHandler()+" as we haven't heard from receiver 
in "+TimeUtil.formatTime((now - timeAllSent), 2, true)+ '.');
> +						String timeString=TimeUtil.formatTime((now - timeAllSent), 2, true);
> +						Logger.error(this, "Terminating send "+_uid+" to "+_destination+" 
from "+_destination.getSocketHandler()+" as we haven't heard from receiver 
in "+timeString+ '.');
> +						sendAborted(RetrievalException.RECEIVER_DIED, "Haven't heard from you 
(receiver) in "+timeString);
>  						return false;
>  					} else {
>  						if(logMINOR) Logger.minor(this, "Ignoring timeout: 
timeAllSent="+timeAllSent+" ("+(System.currentTimeMillis() - timeAllSent)+"), 
getNumSent="+getNumSent()+ '/' +_prb.getNumPackets());
> @@ -276,18 +280,30 @@
>  						_sendComplete = true;
>  						_senderThread.notifyAll();
>  					}
> +					//They aborted, don't need to send an aborted back :)
>  					return false;
>  				} else {
>  					Logger.error(this, "Transmitter received unknown message 
type: "+msg.getSpec().getName());
>  				}
>  			}
> +		} catch (NotConnectedException e) {
> +			//most likely from sending an abort()
> +			Logger.normal(this, "NotConnectedException in BlockTransfer.send():"+e);
> +			return false;
>  		} catch (AbortedException e) {
> -			// Terminate
> +			Logger.normal(this, "AbortedException in BlockTransfer.send():"+e);
> +			try {
> +				sendAborted(RetrievalException.CANCELLED_BY_RECEIVER, "Downstream 
transfer failed");
> +			} catch (NotConnectedException gone) {
> +				//ignore
> +			}
> +			return false;
> +		} finally {
> +			//Terminate, if we are not listening for control packets, don't be 
sending any data
>  			synchronized(_senderThread) {
>  				_sendComplete = true;
>  				_senderThread.notifyAll();
> -			}
> -			return false;
> +			}			
>  		}
>  	}
>  
> 
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> 
> 
-------------- 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/739c2735/attachment.pgp 


More information about the Devl mailing list