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>