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

Matthew Toseland toad at amphibian.dyndns.org
Fri Jan 4 14:53:01 UTC 2008


location > 1.0 is possible if the node set it too high and told us, no?

On Friday 04 January 2008 01:53, you wrote:
> Author: robert
> Date: 2008-01-04 01:53:40 +0000 (Fri, 04 Jan 2008)
> New Revision: 16871
> 
> Modified:
>    trunk/freenet/src/freenet/node/PeerNode.java
> Log:
> comments
> 
> 
> Modified: trunk/freenet/src/freenet/node/PeerNode.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/PeerNode.java	2008-01-04 00:27:19 UTC 
(rev 16870)
> +++ trunk/freenet/src/freenet/node/PeerNode.java	2008-01-04 01:53:40 UTC 
(rev 16871)
> @@ -81,13 +81,15 @@
>  public abstract class PeerNode implements PeerContext, USKRetrieverCallback 
{
>  
>  	private String lastGoodVersion;
> -	/** Set to true based on a relevant incoming handshake from this peer
> -	*  Set true if this peer has a incompatible older build than we are
> -	*/
> +	/**
> +	 * True if this peer has a build number older than our last-known-good 
build number.
> +	 * Note that even if this is true, the node can still be 'connected'.
> +	 */
>  	protected boolean unroutableOlderVersion;
> -	/** Set to true based on a relevant incoming handshake from this peer
> -	*  Set true if this peer has a incompatible newer build than we are
> -	*/
> +	/**
> +	 * True if this peer reports that our build number is before their 
last-known-good build number.
> +	 * Note that even if this is true, the node can still be 'connected'.
> +	 */
>  	protected boolean unroutableNewerVersion;
>  	protected boolean disableRouting;
>  	protected boolean disableRoutingHasBeenSetLocally;
> @@ -158,7 +160,7 @@
>  	private int handshakeCount;
>  	/** After this many failed handshakes, we start the ARK fetcher. */
>  	private static final int MAX_HANDSHAKE_COUNT = 2;
> -	/** Current location in the keyspace */
> +	/** Current location in the keyspace, or -1 if it is unknown */
>  	private double currentLocation;
>  	/** Node identity; for now a block of data, in future a
>  	* public key (FIXME). Cannot be changed.
> @@ -850,47 +852,54 @@
>  	}
>  
>  	/**
> -	* What is my current keyspace location?
> +	* Returns this peer's current keyspace location, or -1 if it is unknown.
>  	*/
>  	public synchronized double getLocation() {
>  		return currentLocation;
>  	}
>  
>  	/**
> -	* Returns a unique node identifier (usefull to compare 2 pn)
> +	* Returns a unique node identifier (usefull to compare two peernodes).
>  	*/
>  	public int getIdentityHash() {
>  		return hashCode;
>  	}
>  
>  	/**
> -	* Is this peer too old for us? (i.e. our lastGoodVersion is newer than 
it's version)
> -	* 
> -	*/
> +	 * Returns true if the last-known build number for this peer is to old to 
allow traffic to be routed to it.
> +	 * This does not give any indication as to the connection status of the 
peer.
> +	 */
>  	public synchronized boolean isUnroutableOlderVersion() {
>  		return unroutableOlderVersion;
>  	}
>  
>  	/**
> -	* Is this peer too new for us? (i.e. our version is older than it's 
lastGoodVersion)
> -	* 
> -	*/
> +	 * Returns true if this (or another) peer has reported to us that our 
build number is too old for data to be routed
> +	 * to us. In turn, we will not route data to them either. Does not 
strictly indicate that the peer is connected.
> +	 */
>  	public synchronized boolean isUnroutableNewerVersion() {
>  		return unroutableNewerVersion;
>  	}
>  
>  	/**
> -	* Is this peer currently connected? (And routing-compatible, i.e. can we 
route
> -	* requests to it, ignoring backoff)
> +	* Returns true if requests can be routed through this peer. True if the 
peer's location is known, presently
> +	* connected, and routing-compatible. That is, ignoring backoff, the peer's 
location is known, build number
> +	* is compatible, and routing has not been explicitly disabled.
>  	* 
>  	* Note possible deadlocks! PeerManager calls this, we call
>  	* PeerManager in e.g. verified.
>  	*/
>  	public boolean isRoutable() {
> +		//FIXME: isConnected() is redundant if 'isRoutable', right? ... 
currentLocation>1.0 is impossible.
>  		return isConnected() && isRoutingCompatible() &&
>  			!(currentLocation < 0.0 || currentLocation > 1.0);
>  	}
>  
> +	/**
> +	 * Returns true if (apart from actually knowing the peer's location), it 
is presumed that this peer could route requests.
> +	 * True if this peer's build number is not 'too-old' or 'too-new', 
actively connected, and not marked as explicity disabled.
> +	 * Does not reflect any 'backoff' logic.
> +	 */
>  	public boolean isRoutingCompatible() {
>  		long now = System.currentTimeMillis();
>  		synchronized(this) {
> @@ -1220,7 +1229,7 @@
>  		synchronized(this) {
>  		long delay;
>  		if(unroutableOlderVersion || unroutableNewerVersion || disableRouting) {
> -			// Let them know we're here, but have no hope of connecting
> +			// Let them know we're here, but have no hope of routing general data to 
them.
>  			delay = Node.MIN_TIME_BETWEEN_VERSION_SENDS + 
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_VERSION_SENDS);
>  		} else if(invalidVersion() && !firstHandshake) {
>  			delay = Node.MIN_TIME_BETWEEN_VERSION_PROBES + 
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_VERSION_PROBES);
> @@ -1802,6 +1811,7 @@
>  		Message dRouting = 
DMT.createRoutingStatus(!disableRoutingHasBeenSetLocally);
>  
>  		try {
> +			//FIXME: Why is location only if routable, and the others not?
>  			if(isRoutable())
>  				sendAsync(locMsg, null, 0, null);
>  			sendAsync(ipMsg, null, 0, null);
> @@ -1896,10 +1906,16 @@
>  		return !Version.checkArbitraryGoodVersion(Version.getVersionString(), 
lastGoodVersion);
>  	}
>  
> +	/**
> +	 * The same as isUnroutableOlderVersion, but not synchronized.
> +	 */
>  	public boolean publicInvalidVersion() {
>  		return unroutableOlderVersion;
>  	}
>  
> +	/**
> +	 * The same as inUnroutableNewerVersion.
> +	 */
>  	public synchronized boolean publicReverseInvalidVersion() {
>  		return unroutableNewerVersion;
>  	}
> @@ -2013,7 +2029,7 @@
>  					currentLocation = newLoc;
>  				}
>  			} catch(FSParseException e) {
> -				// Location is optional, we will wait for FNPLocChangeNotification
> +				// Location is optional, we will wait for FNPLocChangeNotification. 
Until then we will use the last known location (or -1 if we have never 
known).
>  				if(logMINOR)
>  					Logger.minor(this, "Invalid or null location, waiting for 
FNPLocChangeNotification: " + e);
>  			}
> @@ -2780,18 +2796,21 @@
>  		return handshakeCount;
>  	}
>  
> +	/**
> +	 * Queries the Version class to determine if this peers advertised 
build-number is either too-old or
> +	 * to new for the routing of requests.
> +	 */
>  	synchronized void updateVersionRoutablity() {
>  			unroutableOlderVersion = forwardInvalidVersion();
>  			unroutableNewerVersion = reverseInvalidVersion();
>  	}
>  
>  	/**
> -	 * Has the node gone from being routable to being non-routable?
> -	 * This will return true if our lastGoodBuild has changed due to a timed 
mandatory.
> +	 * Will return true if routing to this node is either explictly disabled, 
or disabled due to
> +	 * noted incompatiblity in build-version numbers.
> +	 * Logically: "not(isRoutable())", but will return false even if 
disconnected (meaning routing is not disabled).
>  	 */
>  	public synchronized boolean noLongerRoutable() {
> -		// TODO: We should disconnect here if "protocol version mismatch", maybe 
throwing an exception
> -		// TODO: shouldDisconnectNow() is hopefully only called when we're 
connected, otherwise we're breaking the meaning of verifiedIncompable[Older|
Newer]Version
>  		if(unroutableNewerVersion || unroutableOlderVersion || disableRouting)
>  			return true;
>  		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/20080104/10aec774/attachment.pgp 


More information about the Devl mailing list