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: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20080104/10aec774/attachment.pgp>

Reply via email to