Author: zothar
Date: 2006-06-04 17:07:38 +0000 (Sun, 04 Jun 2006)
New Revision: 9048

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
- Reworked PeerManagerUserAlert to use constants, fixed a some alert reasons 
and added a couple more
- Rename PeerManager.checkEmpty() to updatePMUserAlert()
- Small wording tweak to the log messages added in r9038


Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-06-04 08:50:42 UTC (rev 
9047)
+++ trunk/freenet/src/freenet/node/Node.java    2006-06-04 17:07:38 UTC (rev 
9048)
@@ -1151,7 +1151,7 @@
         // Then read the peers
         peers = new PeerManager(this, new File(nodeDir, 
"peers-"+portNumber).getPath());
         peers.writePeers();
-        peers.checkEmpty();
+        peers.updatePMUserAlert();
         nodePinger = new NodePinger(this);

         usm.setDispatcher(dispatcher=new NodeDispatcher(this));

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2006-06-04 08:50:42 UTC 
(rev 9047)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2006-06-04 17:07:38 UTC 
(rev 9048)
@@ -112,7 +112,7 @@
         myPeers = newMyPeers;
         Logger.normal(this, "Added "+pn);
        }
-        checkEmpty();
+        updatePMUserAlert();
         return true;
     }

@@ -150,7 +150,7 @@

         Logger.normal(this, "Removed "+pn);
        }
-        checkEmpty();
+        updatePMUserAlert();
         return true;
     }

@@ -171,7 +171,7 @@
                        newConnectedPeers = (PeerNode[]) 
a.toArray(newConnectedPeers);
                        connectedPeers = newConnectedPeers;
                }
-               checkEmpty();
+               updatePMUserAlert();
                return true;
        }

@@ -205,7 +205,7 @@
         connectedPeers = newConnectedPeers;
         Logger.minor(this, "Connected peers: "+connectedPeers.length);
        }
-        checkEmpty();
+        updatePMUserAlert();
     }

 //    NodePeer route(double targetLocation, RoutingContext ctx) {
@@ -509,9 +509,10 @@
        }

        /**
-        * Check whether the PM is empty. If so, file a PeerManagerUserAlert on 
the UAM.
+        * Update the numbers needed by our PeerManagerUserAlert on the UAM.
+        * Also run the node's onConnectedPeers() method if applicable
         */
-       public void checkEmpty() {
+       public void updatePMUserAlert() {
                int conns, peers;
                synchronized(this) {
                        conns = this.connectedPeers.length;

Modified: trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java 
2006-06-04 08:50:42 UTC (rev 9047)
+++ trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java 
2006-06-04 17:07:38 UTC (rev 9048)
@@ -5,10 +5,30 @@
 public class PeerManagerUserAlert implements UserAlert {

        final Node n;
-       public int conns;
-       public int peers;
+       public int conns = 0;
+       public int peers = 0;
        boolean isValid=true;
+       int bwlimitDelayTime = 1;
+       int nodeAveragePingTime = 1;

+       /** How many connected peers we need to not get alert about not enough 
*/
+       static final int MIN_CONN_THRESHOLD = 3;
+       
+       /** How many connected peers we can have without getting alerted about 
too many */
+       static final int MAX_CONN_THRESHOLD = 30;
+       
+       /** How many disconnected peers we can have without getting alerted 
about too many */
+       static final int MAX_DISCONN_PEER_THRESHOLD = 20;
+       
+       /** How many peers we can have without getting alerted about too many */
+       static final int MAX_PEER_THRESHOLD = 50;
+       
+       /** How high can bwlimitDelayTime be before we alert (in milliseconds)*/
+       static final int MAX_BWLIMIT_DELAY_TIME_THRESHOLD = 1000;
+       
+       /** How high can nodeAveragePingTime be before we alert (in 
milliseconds)*/
+       static final int MAX_NODE_AVERAGE_PING_TIME_THRESHOLD = 1500;
+       
        public PeerManagerUserAlert(Node n) {
                this.n = n;
        }
@@ -22,10 +42,18 @@
                        return "No peers found";
                if(conns == 0)
                        return "No open connections";
-               if(conns == 1)
-                       return "Only 1 open connection";
-               if(conns == 2)
-                       return "Only 2 open connections";
+               if(conns < MIN_CONN_THRESHOLD)
+                       return "Only "+conns+" open connection";
+               if((peers - conns) > MAX_DISCONN_PEER_THRESHOLD)
+                       return "Too many disconnected peers";
+               if(conns > MAX_CONN_THRESHOLD)
+                       return "Too many open connections";
+               if(peers > MAX_PEER_THRESHOLD)
+                       return "Too many peers";
+               if(bwlimitDelayTime > MAX_BWLIMIT_DELAY_TIME_THRESHOLD)
+                       return "bwlimitDelayTime too high";
+               if(nodeAveragePingTime > MAX_NODE_AVERAGE_PING_TIME_THRESHOLD)
+                       return "nodeAveragePingTime too high";
                else throw new IllegalArgumentException("Not valid");
        }

@@ -41,8 +69,6 @@
                        else
                                s += ". You could " + end + ", but remember 
that you are vulnerable to " +
                                "those you are directly connected to. (This is 
especially true in this early alpha of Freenet 0.7...)<br/>BE SURE THAT THE 
OTHER PERSON HAS ADDED YOUR REFERENCE, TOO, AS ONE-WAY CONNECTIONS WON'T WORK!";
-               }else if(peers-conns >= 20){ 
-                       s = "This node has too many disconnected peers : it 
will have a negative impact on your performance! Consider \"cleaning up\" your 
peer list.";
                }else if(conns == 0) {
                        s = "This node has not been able to connect to any 
other nodes so far; it will not be able to function normally. " +
                        "Hopefully some of your peers will connect soon; if 
not, try to get some more peers.";
@@ -54,20 +80,44 @@
                        s = "This node has only two connections. Performance 
and security will not be very good, and your node is not doing any routing for 
other nodes. " +
                        "Your node is embedded like a 'chain' in the network 
and does not contribute to the network's health." +
                        "Try to get at least 3 connected peers at any given 
time.";
-               }else if(conns >= 30) {
-                       s = "This node many connections. We don't encourage 
such a behaviour : Ubernodes are hurting the network.";
+               } else if((peers - conns) > MAX_DISCONN_PEER_THRESHOLD){ 
+                       s = "This node has too many disconnected peers 
("+(peers - conns)+" > "+MAX_DISCONN_PEER_THRESHOLD+"). This will have a impact 
your performance as disconnected peers also consume bandwidth and CPU. Consider 
\"cleaning up\" your peer list.";
+               } else if(conns > MAX_CONN_THRESHOLD) {
+                       s = "This node has too many connections ("+conns+" > 
"+MAX_CONN_THRESHOLD+"). We don't encourage such a behaviour; Ubernodes are 
hurting the network.";
+               } else if(peers > MAX_PEER_THRESHOLD) {
+                       s = "This node has too many peers ("+peers+" > 
"+MAX_PEER_THRESHOLD+"). This will impact your performance as all peers 
(connected or not) consume bandwidth and CPU. Consider \"cleaning up\" your 
peer list.";
+               } else if(bwlimitDelayTime > MAX_BWLIMIT_DELAY_TIME_THRESHOLD) {
+                       s = "This node has to wait too long for available 
bandwidth ("+bwlimitDelayTime+" > "+MAX_BWLIMIT_DELAY_TIME_THRESHOLD+").  
Increase your output bandwidth limit and/or remove some peers to improve the 
situation.";
+               } else if(nodeAveragePingTime > 
MAX_NODE_AVERAGE_PING_TIME_THRESHOLD) {
+                       s = "This node is having trouble talking with it's 
peers quickly enough ("+nodeAveragePingTime+" > 
"+MAX_NODE_AVERAGE_PING_TIME_THRESHOLD+").  Decrease your output bandwidth 
limit and or remove som peers to improve the situation.";
                } else throw new IllegalArgumentException("Not valid");
                return s;
        }

        public short getPriorityClass() {
-               if(peers == 0 || conns == 0 || conns >= 20)
+               if(peers == 0 ||
+                               conns == 0 ||
+                               (peers - conns) > MAX_DISCONN_PEER_THRESHOLD ||
+                               conns > MAX_CONN_THRESHOLD ||
+                               peers > MAX_PEER_THRESHOLD ||
+                               bwlimitDelayTime > 
MAX_BWLIMIT_DELAY_TIME_THRESHOLD ||
+                               nodeAveragePingTime > 
MAX_NODE_AVERAGE_PING_TIME_THRESHOLD)
                        return UserAlert.CRITICAL_ERROR;
                return UserAlert.ERROR;
        }

        public boolean isValid() {
-               return (peers == 0 || conns <= 2)&&isValid;
+               // only update here so we don't get odd behavior with it 
fluctuating
+               bwlimitDelayTime = (int) n.getBwlimitDelayTime();
+               nodeAveragePingTime = (int) n.getNodeAveragePingTime();
+               return (peers == 0 ||
+                               conns < 3 ||
+                               (peers - conns) > MAX_DISCONN_PEER_THRESHOLD ||
+                               conns > MAX_CONN_THRESHOLD ||
+                               peers > MAX_PEER_THRESHOLD ||
+                               bwlimitDelayTime > 
MAX_BWLIMIT_DELAY_TIME_THRESHOLD ||
+                               nodeAveragePingTime > 
MAX_NODE_AVERAGE_PING_TIME_THRESHOLD) &&
+                               isValid;
        }

        public void isValid(boolean b){

Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2006-06-04 
08:50:42 UTC (rev 9047)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2006-06-04 
17:07:38 UTC (rev 9048)
@@ -188,8 +188,8 @@
                                        chkStore.seek(seekTarget);
                                } catch (IOException ioe) {
                                        if(seekTarget > (2*1024*1024*1024))
-                                               Logger.error(this, "Environment 
does not support files greater than 2 GB?");
-                                               System.out.println("Environment 
does not support files greater than 2 GB? (exception to follow)");
+                                               Logger.error(this, "Environment 
does not support files bigger than 2 GB?");
+                                               System.out.println("Environment 
does not support files bigger than 2 GB? (exception to follow)");
                                        Logger.error(this, "Caught IOException 
on chkStore.seek("+seekTarget+")");
                                        throw ioe;
                                }
@@ -533,8 +533,8 @@
                          chkStore.seek(byteOffset);
                        } catch (IOException ioe) {
                          if(byteOffset > (2*1024*1024*1024))
-                           Logger.error(this, "Environment does not support 
files greater than 2 GB?");
-                           System.out.println("Environment does not support 
files greater than 2 GB? (exception to follow)");
+                           Logger.error(this, "Environment does not support 
files bigger than 2 GB?");
+                           System.out.println("Environment does not support 
files bigger than 2 GB? (exception to follow)");
                          Logger.error(this, "Caught IOException on 
chkStore.seek("+byteOffset+")");
                              throw ioe;
                        }


Reply via email to