Author: zothar
Date: 2006-06-09 21:29:39 +0000 (Fri, 09 Jun 2006)
New Revision: 9110

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/Version.java
Log:
794: Added a peer routing backoff summary to the /darknet/ page.

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-06-09 21:10:34 UTC (rev 9109)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-06-09 21:29:39 UTC (rev 9110)
@@ -146,6 +146,26 @@
                buf.append("</div>");
                buf.append("</div>\n");

+               buf.append("</td><td class=\"last\">");
+               
+               // Peer routing backoff reason box
+               buf.append("<div class=\"infobox\">");
+               buf.append("<div class=\"infobox-header\">Peer backoff 
reasons</div>");
+               buf.append("<div class=\"infobox-content\">");
+               String [] routingBackoffReasons = 
node.getPeerNodeRoutingBackoffReasons();
+               if(routingBackoffReasons.length == 0) {
+                       buf.append("Good, your node is not backed off from any 
peers!<br/>\n");
+               } else {
+                       for(int i=0;i<routingBackoffReasons.length;i++) {
+                               int reasonCount = 
node.getPeerNodeRoutingBackoffReasonSize(routingBackoffReasons[i]);
+                               if(reasonCount > 0) {
+                                       
buf.append(routingBackoffReasons[i]+":&nbsp;"+reasonCount+"<br/>\n");
+                               }
+                       }
+               }
+               buf.append("</div>");
+               buf.append("</div>\n");
+               
                buf.append("</td></tr></table>\n");

                buf.append("<div class=\"infobox infobox-normal\">\n");

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-06-09 21:10:34 UTC (rev 
9109)
+++ trunk/freenet/src/freenet/node/Node.java    2006-06-09 21:29:39 UTC (rev 
9110)
@@ -478,6 +478,8 @@
     private final long peerNodeStatusLogInterval = 1000;
     /** PeerNode statuses, by status */
     private final HashMap peerNodeStatuses;
+    /** PeerNode routing backoff reasons, by reason */
+    private final HashMap peerNodeRoutingBackoffReasons;
     /** Next time to update oldestNeverConnectedPeerAge */
     private long nextOldestNeverConnectedPeerAgeUpdateTime = -1;
     /** oldestNeverConnectedPeerAge update interval (milliseconds) */
@@ -909,6 +911,7 @@
         insertSenders = new HashMap();
         arkFetchers = new HashMap();
         peerNodeStatuses = new HashMap();
+        peerNodeRoutingBackoffReasons = new HashMap();
         runningUIDs = new HashSet();
         dnsr = new DNSRequester(this);
         ps = new PacketSender(this);
@@ -2903,7 +2906,7 @@
     }

     /**
-     * Remove a disconnected node from the map
+     * Remove a PeerNode status from the map
      */
     public synchronized void removePeerNodeStatus(int pnStatus, PeerNode 
peerNode) {
       Integer peerNodeStatus = new Integer(pnStatus);
@@ -2999,4 +3002,70 @@
     public int getNetworkSizeEstimate(int numberOfMinutes) {
       return lm.getNetworkSizeEstimate( numberOfMinutes );
     }
+
+    /**
+     * Add a PeerNode routing backoff reason to the map
+     */
+    public synchronized void addPeerNodeRoutingBackoffReason(String 
peerNodeRoutingBackoffReason, PeerNode peerNode) {
+       HashSet reasonSet = null;
+       
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
+               reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
+               if(reasonSet.contains(peerNode)) {
+                       Logger.error(this, "addPeerNodeRoutingBackoffReason(): 
identity '"+peerNode.getIdentityString()+"' already in 
peerNodeRoutingBackoffReasons as "+peerNode+" with status code 
"+peerNodeRoutingBackoffReason);
+                       return;
+               }
+               
peerNodeRoutingBackoffReasons.remove(peerNodeRoutingBackoffReason);
+       } else {
+               reasonSet = new HashSet();
+       }
+       Logger.minor(this, "addPeerNodeRoutingBackoffReason(): adding PeerNode 
for '"+peerNode.getIdentityString()+"' with status code 
"+peerNodeRoutingBackoffReason);
+       reasonSet.add(peerNode);
+       peerNodeRoutingBackoffReasons.put(peerNodeRoutingBackoffReason, 
reasonSet);
+    }
+    
+    /**
+     * What are the currently tracked PeerNode routing backoff reasons?
+     */
+    public String [] getPeerNodeRoutingBackoffReasons() {
+       String [] reasonStrings = (String []) 
peerNodeRoutingBackoffReasons.keySet().toArray(new 
String[peerNodeRoutingBackoffReasons.size()]);
+       Arrays.sort(reasonStrings);
+       return reasonStrings;
+    }
+    
+    /**
+     * How many PeerNodes have a particular routing backoff reason?
+     */
+    public int getPeerNodeRoutingBackoffReasonSize(String 
peerNodeRoutingBackoffReason) {
+       HashSet reasonSet = null;
+       
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
+               reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
+       } else {
+               reasonSet = new HashSet();
+       }
+       return reasonSet.size();
+    }
+
+    /**
+     * Remove a PeerNode routing backoff reason from the map
+     */
+    public synchronized void removePeerNodeRoutingBackoffReason(String 
peerNodeRoutingBackoffReason, PeerNode peerNode) {
+       HashSet reasonSet = null;
+       
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
+               reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
+               if(!reasonSet.contains(peerNode)) {
+                       Logger.error(this, 
"removePeerNodeRoutingBackoffReason(): identity 
'"+peerNode.getIdentityString()+"' not in peerNodeRoutingBackoffReasons with 
status code "+peerNodeRoutingBackoffReason);
+                       return;
+               }
+               
peerNodeRoutingBackoffReasons.remove(peerNodeRoutingBackoffReason);
+       } else {
+               reasonSet = new HashSet();
+       }
+       Logger.minor(this, "removePeerNodeRoutingBackoffReason(): removing 
PeerNode for '"+peerNode.getIdentityString()+"' with status code 
"+peerNodeRoutingBackoffReason);
+       if(reasonSet.contains(peerNode)) {
+               reasonSet.remove(peerNode);
+       }
+       if(reasonSet.size() > 0) {
+               peerNodeRoutingBackoffReasons.put(peerNodeRoutingBackoffReason, 
reasonSet);
+       }
+    }
 }

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-06-09 21:10:34 UTC 
(rev 9109)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-06-09 21:29:39 UTC 
(rev 9110)
@@ -1556,7 +1556,9 @@
        /** Current nominal routing backoff length */
        int routingBackoffLength = INITIAL_ROUTING_BACKOFF_LENGTH;
        /** Last backoff reason */
-       String lastBackoffReason = null;
+       String lastRoutingBackoffReason = null;
+       /** Previous backoff reason (used by setPeerNodeStatus)*/
+       String previousRoutingBackoffReason = null;

        /**
         * Got a local RejectedOverload.
@@ -1696,11 +1698,11 @@
        }

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

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

        public boolean hasCompletedHandshake() {
@@ -1830,6 +1832,16 @@
                        peerNodeStatus = Node.PEER_NODE_STATUS_CONNECTED;
                        if(now < routingBackedOffUntil) {
                                peerNodeStatus = 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF;
+                               
if(!lastRoutingBackoffReason.equals(previousRoutingBackoffReason)) {
+                                       
node.removePeerNodeRoutingBackoffReason(previousRoutingBackoffReason, this);
+                                       
node.addPeerNodeRoutingBackoffReason(lastRoutingBackoffReason, this);
+                                       previousRoutingBackoffReason = 
lastRoutingBackoffReason;
+                               }
+                       } else {
+                               if(previousRoutingBackoffReason != null) {
+                                       
node.removePeerNodeRoutingBackoffReason(previousRoutingBackoffReason, this);
+                                       previousRoutingBackoffReason = null;
+                               }
                        }
                } else if(completedHandshake && 
verifiedIncompatibleNewerVersion) {
                        peerNodeStatus = Node.PEER_NODE_STATUS_TOO_NEW;

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-06-09 21:10:34 UTC (rev 
9109)
+++ trunk/freenet/src/freenet/node/Version.java 2006-06-09 21:29:39 UTC (rev 
9110)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 793;
+       private static final int buildNumber = 794;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 765;


Reply via email to