Not a bad idea. Go ahead.
On Sun, May 14, 2006 at 08:55:56AM -0500, David Sowder (Zothar) wrote:
>
> My apologies for such a major change in r8687. At the time, I thought I
> was fixing an oversight and optimizing a tight loop and it didn't appear
> to change my node's behavior in the half hour or so I was running it
> before committing (though the changes may explain the large backoff
> sizes some of my peers had gotten from my node by the time I looked at
> it again today).
>
> It seems I greatly misunderstood what "backing off" mean and I may not
> be the only one. I now understand being "backed off" from a peer to
> mean that we will not route any new messages to that peer rather than we
> will generally stop talking to that peer. Thus I propose the following
> name-only changes. I'll commit them if I get consensus that they're a
> good idea.
>
>
>
> Index: clients/http/DarknetConnectionsToadlet.java
> ===================================================================
> --- clients/http/DarknetConnectionsToadlet.java (revision 8701)
> +++ clients/http/DarknetConnectionsToadlet.java (working copy)
> @@ -102,9 +102,9 @@
> String[][] messageTypesRows = new String[peerNodes.length][];
> for(int i=0;i<peerNodes.length;i++) {
> PeerNode pn = peerNodes[i];
> - long backedOffUntil = pn.getBackedOffUntil();
> - boolean backedOffNow = (now < backedOffUntil);
> - int backoff = (int)(Math.max(backedOffUntil - now, 0));
> + long routingBackedOffUntil = pn.getRoutingBackedOffUntil();
> + boolean routingBackedOffNow = (now < routingBackedOffUntil);
> + int backoff = (int)(Math.max(routingBackedOffUntil - now, 0));
> long idle = pn.lastReceivedPacketTime();
>
> // Elements must be HTML encoded.
> @@ -115,7 +115,7 @@
> Object status;
> if(pn.isConnected()) {
> status = CONNECTED;
> - if(backedOffNow) {
> + if(routingBackedOffNow) {
> status = BACKED_OFF;
> }
> } else if(pn.hasCompletedHandshake() &&
> !Version.checkGoodVersion(pn.getVersion())) {
> @@ -130,7 +130,7 @@
> row[3] = pn.getDetectedPeer() != null ?
> HTMLEncoder.encode(pn.getDetectedPeer().toString()) : "(address unknown)";
> row[4] = HTMLEncoder.encode(pn.getVersion());
> row[5] = new Double(pn.getLocation().getValue());
> - row[6] = backoff/1000 + "/" + pn.getBackoffLength()/1000;
> + row[6] = backoff/1000 + "/" +
> pn.getRoutingBackoffLength()/1000;
> if (idle == -1) row[7] = " ";
> else row[7] = new Long((now - idle) / 60000);
> row[8] = "<input type=\"checkbox\"
> name=\"delete_node_"+pn.hashCode()+"\" />";
> Index: node/PeerNode.java
> ===================================================================
> --- node/PeerNode.java (revision 8701)
> +++ node/PeerNode.java (working copy)
> @@ -1106,7 +1106,7 @@
>
> public String getStatus() {
> return
> - (isConnected ? "CONNECTED " : "DISCONNECTED") + " " +
> getPeer()+" "+myName+" "+currentLocation.getValue()+" "+getVersion()+"
> backoff: "+backoffLength+" ("+(Math.max(backedOffUntil -
> System.currentTimeMillis(),0))+")";
> + (isConnected ? "CONNECTED " : "DISCONNECTED") + " " +
> getPeer()+" "+myName+" "+currentLocation.getValue()+" "+getVersion()+"
> backoff: "+routingBackoffLength+" ("+(Math.max(routingBackedOffUntil -
> System.currentTimeMillis(),0))+")";
> }
>
> public String getFreevizOutput() {
> @@ -1221,26 +1221,26 @@
> return hashCode;
> }
>
> - private final Object backoffSync = new Object();
> + private final Object routingBackoffSync = new Object();
>
> - public boolean isBackedOff() {
> - synchronized(backoffSync) {
> - if(System.currentTimeMillis() < backedOffUntil) {
> - Logger.minor(this, "Is backed off");
> + public boolean isRoutingBackedOff() {
> + synchronized(routingBackoffSync) {
> + if(System.currentTimeMillis() < routingBackedOffUntil) {
> + Logger.minor(this, "Routing is backed off");
> return true;
> } else return false;
> }
> }
>
> - long backedOffUntil = -1;
> - /** Initial nominal backoff length */
> - final int INITIAL_BACKOFF_LENGTH = 5000;
> + long routingBackedOffUntil = -1;
> + /** Initial nominal routing backoff length */
> + final int INITIAL_ROUTING_BACKOFF_LENGTH = 5000;
> /** Double every time */
> - final int BACKOFF_MULTIPLIER = 2;
> + final int ROUTING_BACKOFF_MULTIPLIER = 2;
> /** Maximum: 24 hours */
> - final int MAX_BACKOFF_LENGTH = 24*60*60*1000;
> - /** Current nominal backoff length */
> - int backoffLength = INITIAL_BACKOFF_LENGTH;
> + final int MAX_ROUTING_BACKOFF_LENGTH = 24*60*60*1000;
> + /** Current nominal routing backoff length */
> + int routingBackoffLength = INITIAL_ROUTING_BACKOFF_LENGTH;
>
> /**
> * Got a local RejectedOverload.
> @@ -1248,36 +1248,36 @@
> */
> public void localRejectedOverload() {
> Logger.minor(this, "Local rejected overload on "+this);
> - synchronized(backoffSync) {
> + synchronized(routingBackoffSync) {
> long now = System.currentTimeMillis();
> // Don't back off any further if we are already backed off
> - if(now > backedOffUntil) {
> - backoffLength = backoffLength * BACKOFF_MULTIPLIER;
> - if(backoffLength > MAX_BACKOFF_LENGTH)
> - backoffLength = MAX_BACKOFF_LENGTH;
> - int x = node.random.nextInt(backoffLength);
> - backedOffUntil = now + x;
> - Logger.minor(this, "Backing off:
> backoffLength="+backoffLength+", until "+x+"ms on "+getPeer());
> + if(now > routingBackedOffUntil) {
> + routingBackoffLength = routingBackoffLength *
> ROUTING_BACKOFF_MULTIPLIER;
> + if(routingBackoffLength > MAX_ROUTING_BACKOFF_LENGTH)
> + routingBackoffLength = MAX_ROUTING_BACKOFF_LENGTH;
> + int x = node.random.nextInt(routingBackoffLength);
> + routingBackedOffUntil = now + x;
> + Logger.minor(this, "Backing off:
> routingBackoffLength="+routingBackoffLength+", until "+x+"ms on
> "+getPeer());
> } else {
> - Logger.minor(this, "Ignoring localRejectedOverload:
> "+(backedOffUntil-now)+"ms remaining on backoff on "+getPeer());
> + Logger.minor(this, "Ignoring localRejectedOverload:
> "+(routingBackedOffUntil-now)+"ms remaining on routing backoff on
> "+getPeer());
> }
> }
> }
>
> /**
> * Didn't get RejectedOverload.
> - * Reset backoff.
> + * Reset routing backoff.
> */
> public void successNotOverload() {
> Logger.minor(this, "Success not overload on "+this);
> - synchronized(backoffSync) {
> + synchronized(routingBackoffSync) {
> long now = System.currentTimeMillis();
> // Don't un-backoff if still backed off
> - if(now > backedOffUntil) {
> - backoffLength = INITIAL_BACKOFF_LENGTH;
> - Logger.minor(this, "Resetting backoff on "+getPeer());
> + if(now > routingBackedOffUntil) {
> + routingBackoffLength = INITIAL_ROUTING_BACKOFF_LENGTH;
> + Logger.minor(this, "Resetting routing backoff on
> "+getPeer());
> } else {
> - Logger.minor(this, "Ignoring successNotOverload:
> "+(backedOffUntil-now)+"ms remaining on backoff on "+getPeer());
> + Logger.minor(this, "Ignoring successNotOverload:
> "+(routingBackedOffUntil-now)+"ms remaining on routing backoff on
> "+getPeer());
> }
> }
> }
> @@ -1356,12 +1356,12 @@
> return myName;
> }
>
> - public int getBackoffLength() {
> - return this.backoffLength;
> + public int getRoutingBackoffLength() {
> + return this.routingBackoffLength;
> }
>
> - public long getBackedOffUntil() {
> - return backedOffUntil;
> + public long getRoutingBackedOffUntil() {
> + return routingBackedOffUntil;
> }
>
> public boolean hasCompletedHandshake() {
> Index: node/PeerManager.java
> ===================================================================
> --- node/PeerManager.java (revision 8701)
> +++ node/PeerManager.java (working copy)
> @@ -395,8 +395,8 @@
> Logger.minor(this, "Skipping (not connected):
> "+p.getPeer());
> continue;
> }
> - if(p.isBackedOff()) {
> - Logger.minor(this, "Skipping (backed off): "+p.getPeer());
> + if(p.isRoutingBackedOff()) {
> + Logger.minor(this, "Skipping (routing backed off):
> "+p.getPeer());
> continue;
> }
> count++;
>
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>
--
Matthew J Toseland - toad at amphibian.dyndns.org
Freenet Project Official Codemonkey - http://freenetproject.org/
ICTHUS - Nothing is impossible. Our Boss says so.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20060515/9674aaca/attachment.pgp>