Author: zothar
Date: 2006-07-14 16:44:51 +0000 (Fri, 14 Jul 2006)
New Revision: 9601

Modified:
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Routing backoff related locking consistency fixes.

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-07-14 16:17:24 UTC 
(rev 9600)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-07-14 16:44:51 UTC 
(rev 9601)
@@ -1466,15 +1466,7 @@
     }

     public String getStatus() {
-       String status;
-       if(isRoutable())
-               status = "CONNECTED";
-       else if (isConnected())
-               status = "INCOMPATIBLE";
-       else
-               status = "DISCONNECTED";
-        return 
-               status + " " + getPeer()+" "+myName+" 
"+currentLocation.getValue()+" "+getVersion()+" backoff: 
"+routingBackoffLength+" ("+(Math.max(routingBackedOffUntil - 
System.currentTimeMillis(),0))+")";
+        return getPeerNodeStatusString() + " " + getPeer()+" "+myName+" 
"+currentLocation.getValue()+" "+getVersion()+" backoff: 
"+getRoutingBackoffLength()+" ("+(Math.max(getRoutingBackedOffUntil() - 
System.currentTimeMillis(),0))+")";
     }

     public String getTMCIPeerInfo() {
@@ -1549,7 +1541,7 @@
                        fs.put("peerAddedTime", 
Long.toString(tempPeerAddedTime));
                }
                fs.put("routingBackoffPercent", 
Double.toString(backedOffPercent.currentValue() * 100));
-               fs.put("routingBackoff", 
Long.toString((Math.max(routingBackedOffUntil - now, 0))));
+               fs.put("routingBackoff", 
Long.toString((Math.max(getRoutingBackedOffUntil() - now, 0))));
                fs.put("routingBackoffLength", 
Integer.toString(getRoutingBackoffLength()));
                fs.put("status", getPeerNodeStatusString());
        return fs;
@@ -1681,12 +1673,16 @@
         * Track the percentage of time a peer spends backed off
         */
        private void reportBackoffStatus(long now) {
+               long localRoutingBackedOffUntil = -1;
+               synchronized(routingBackoffSync) {
+                       localRoutingBackedOffUntil = routingBackedOffUntil;
+               }
                if(now > lastSampleTime) {
-                       if (now > routingBackedOffUntil) {
-                               if (lastSampleTime > routingBackedOffUntil) {
+                       if (now > localRoutingBackedOffUntil) {
+                               if (lastSampleTime > 
localRoutingBackedOffUntil) {
                                        backedOffPercent.report(0.0);
                                } else {
-                                       
backedOffPercent.report((double)(routingBackedOffUntil-lastSampleTime)/(double)(now-lastSampleTime));
+                                       
backedOffPercent.report((double)(localRoutingBackedOffUntil - 
lastSampleTime)/(double)(now - lastSampleTime));
                                }
                        } else {
                                backedOffPercent.report(1.0);
@@ -1825,23 +1821,27 @@
        }

        public int getRoutingBackoffLength() {
-               return this.routingBackoffLength;
+        synchronized(routingBackoffSync) {
+                       return routingBackoffLength;
+               }
        }

        public long getRoutingBackedOffUntil() {
-               return routingBackedOffUntil;
+        synchronized(routingBackoffSync) {
+                       return routingBackedOffUntil;
+               }
        }

-       public String getLastBackoffReason() {
+       public synchronized String getLastBackoffReason() {
                return lastRoutingBackoffReason;
        }

-       public String getPreviousBackoffReason() {
+       public synchronized String getPreviousBackoffReason() {
                return previousRoutingBackoffReason;
        }

-       public void setLastBackoffReason(String s) {
-               this.lastRoutingBackoffReason = s;
+       public synchronized void setLastBackoffReason(String s) {
+               lastRoutingBackoffReason = s;
        }

        public boolean hasCompletedHandshake() {
@@ -1992,7 +1992,7 @@
                int oldPeerNodeStatus = peerNodeStatus;
                if(isRoutable()) {
                        peerNodeStatus = Node.PEER_NODE_STATUS_CONNECTED;
-                       if(now < routingBackedOffUntil) {
+                       if(now < getRoutingBackedOffUntil()) {
                                peerNodeStatus = 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF;
                                
if(!lastRoutingBackoffReason.equals(previousRoutingBackoffReason) || 
(previousRoutingBackoffReason == null)) {
                                        if(previousRoutingBackoffReason != 
null) {


Reply via email to