Author: zothar
Date: 2006-06-23 21:48:04 +0000 (Fri, 23 Jun 2006)
New Revision: 9376

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PacketSender.java
   trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java
Log:
PeerManagerUserAlerts for bwlimitDelayTime and nodeAveragePingTime each now 
require 10 minutes of continuous time over threshold.  Bumped maximum 
disconnected peer alert threshold to 30.  Renamed PeerManagerUserAlert static 
variables.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-06-23 20:45:44 UTC (rev 
9375)
+++ trunk/freenet/src/freenet/node/Node.java    2006-06-23 21:48:04 UTC (rev 
9376)
@@ -415,6 +415,14 @@
        /** If the throttled packet delay is less than this, reject no packets; 
if it's
         * between the two, reject some packets. */
        public static final long SUB_MAX_THROTTLE_DELAY = 1000;
+       /** How high can bwlimitDelayTime be before we alert (in milliseconds)*/
+       public static final long MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD = 
MAX_THROTTLE_DELAY*2;
+       /** How high can nodeAveragePingTime be before we alert (in 
milliseconds)*/
+       public static final long MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD = 
MAX_PING_TIME*2;
+       /** How long we're over the bwlimitDelayTime threshold before we alert 
(in milliseconds)*/
+       public static final long MAX_BWLIMIT_DELAY_TIME_ALERT_DELAY = 
10*60*1000;  // 10 minutes
+       /** How long we're over the nodeAveragePingTime threshold before we 
alert (in milliseconds)*/
+       public static final long MAX_NODE_AVERAGE_PING_TIME_ALERT_DELAY = 
10*60*1000;  // 10 minutes

        public static final int SCHEDULER_DEFAULT = 0;
        public static final int SCHEDULER_IMPROVED_1 = 1;
@@ -496,6 +504,18 @@
        private long nextReadyARKFetcherStartTime = -1;
        /** Ready ARKFetcher start interval (milliseconds) */
        private final long readyARKFetcherStartInterval = 1000;
+       /** Next time to update PeerManagerUserAlert stats */
+       private long nextPeerManagerUserAlertStatsUpdateTime = -1;
+       /** PeerManagerUserAlert stats update interval (milliseconds) */
+       private final long peerManagerUserAlertStatsUpdateInterval = 1000;  // 
1 second
+       /** first time bwlimitDelay was over PeerManagerUserAlert threshold */
+       private long firstBwlimitDelayTimeThresholdBreak = 0;
+       /** first time nodeAveragePing was over PeerManagerUserAlert threshold 
*/
+       private long firstNodeAveragePingTimeThresholdBreak = 0;
+       /** bwlimitDelay PeerManagerUserAlert should happen if true */
+       public boolean bwlimitDelayAlertRelevant = false;
+       /** nodeAveragePing PeerManagerUserAlert should happen if true */
+       public boolean nodeAveragePingAlertRelevant = false;

        private final HashSet runningUIDs;

@@ -2407,7 +2427,6 @@
        }

        public SSKBlock fetch(NodeSSK key) {
-               // Can we just lock on sskDatastore here?  **FIXME**
                try {
                        return sskDatastore.fetch(key, false);
                } catch (IOException e) {
@@ -3250,4 +3269,38 @@
                nextReadyARKFetcherStartTime = now + 
readyARKFetcherStartInterval;
          }
        }
+
+       /**
+        * Update peerManagerUserAlertStats if the timer has expired
+        */
+       public void maybeUpdatePeerManagerUserAlertStats(long now) {
+               if(now > nextPeerManagerUserAlertStatsUpdateTime) {
+                       if(getBwlimitDelayTime() > 
MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD) {
+                               if(firstBwlimitDelayTimeThresholdBreak == 0) {
+                                       firstBwlimitDelayTimeThresholdBreak = 
now;
+                               }
+                       } else {
+                               firstBwlimitDelayTimeThresholdBreak = 0;
+                       }
+                       if(firstBwlimitDelayTimeThresholdBreak != 0 && (now - 
firstBwlimitDelayTimeThresholdBreak) >= MAX_BWLIMIT_DELAY_TIME_ALERT_DELAY) {
+                               bwlimitDelayAlertRelevant = true;
+                       } else {
+                               bwlimitDelayAlertRelevant = false;
+                       }
+                       if(getNodeAveragePingTime() > 
MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD) {
+                               if(firstNodeAveragePingTimeThresholdBreak == 0) 
{
+                                       firstNodeAveragePingTimeThresholdBreak 
= now;
+                               }
+                       } else {
+                               firstNodeAveragePingTimeThresholdBreak = 0;
+                       }
+                       if(firstNodeAveragePingTimeThresholdBreak != 0 && (now 
- firstNodeAveragePingTimeThresholdBreak) >= 
MAX_NODE_AVERAGE_PING_TIME_ALERT_DELAY) {
+                               nodeAveragePingAlertRelevant = true;
+                       } else {
+                               nodeAveragePingAlertRelevant = false;
+                       }
+                       Logger.debug(this, "mUPMUAS: "+now+": 
"+getBwlimitDelayTime()+" >? "+MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD+" since 
"+firstBwlimitDelayTimeThresholdBreak+" ("+bwlimitDelayAlertRelevant+") 
"+getNodeAveragePingTime()+" >? "+MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD+" 
since "+firstNodeAveragePingTimeThresholdBreak+" 
("+nodeAveragePingAlertRelevant+")");
+                       nextPeerManagerUserAlertStatsUpdateTime = now + 
peerManagerUserAlertStatsUpdateInterval;
+               }
+       }
 }

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-06-23 20:45:44 UTC 
(rev 9375)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-06-23 21:48:04 UTC 
(rev 9376)
@@ -144,6 +144,7 @@
         node.maybeLogPeerNodeStatusSummary(now);
         node.maybeUpdateOldestNeverConnectedPeerAge(now);
         node.maybeStartAReadyARKFetcher(now);
+        node.maybeUpdatePeerManagerUserAlertStats(now);
         long nextActionTime = Long.MAX_VALUE;
         long oldTempNow = now;
         for(int i=0;i<nodes.length;i++) {

Modified: trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java 
2006-06-23 20:45:44 UTC (rev 9375)
+++ trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java 
2006-06-23 21:48:04 UTC (rev 9376)
@@ -13,25 +13,19 @@
        long oldestNeverConnectedPeerAge = 0;

        /** How many connected peers we need to not get alert about not enough 
*/
-       static final int MIN_CONN_THRESHOLD = 3;
+       static final int MIN_CONN_ALERT_THRESHOLD = 3;

        /** How many connected peers we can have without getting alerted about 
too many */
-       static final int MAX_CONN_THRESHOLD = 30;
+       static final int MAX_CONN_ALERT_THRESHOLD = 30;

        /** How many disconnected peers we can have without getting alerted 
about too many */
-       static final int MAX_DISCONN_PEER_THRESHOLD = 20;
+       static final int MAX_DISCONN_PEER_ALERT_THRESHOLD = 30;

        /** How many peers we can have without getting alerted about too many */
-       static final int MAX_PEER_THRESHOLD = 50;
+       static final int MAX_PEER_ALERT_THRESHOLD = 50;

-       /** How high can bwlimitDelayTime be before we alert (in milliseconds)*/
-       static final int MAX_BWLIMIT_DELAY_TIME_THRESHOLD = 2000;
-       
-       /** How high can nodeAveragePingTime be before we alert (in 
milliseconds)*/
-       static final int MAX_NODE_AVERAGE_PING_TIME_THRESHOLD = 1000;
-       
        /** How high can oldestNeverConnectedPeerAge be before we alert (in 
milliseconds)*/
-       static final long MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_THRESHOLD = 
((long) 2)*7*24*60*60*1000;  // 2 weeks
+       static final long MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_ALERT_THRESHOLD = 
((long) 2)*7*24*60*60*1000;  // 2 weeks

        public PeerManagerUserAlert(Node n) {
                this.n = n;
@@ -42,26 +36,27 @@
        }

        public String getTitle() {
+               long now = System.currentTimeMillis();
                if(peers == 0)
                        return "No peers found";
                if(conns == 0)
                        return "No open connections";
-               if(conns < MIN_CONN_THRESHOLD) {
+               if(conns < MIN_CONN_ALERT_THRESHOLD) {
                        String suff = "";
                        if (conns > 1) suff = "s";
                        return "Only "+conns+" open connection"+suff;
                }
-               if((peers - conns) > MAX_DISCONN_PEER_THRESHOLD)
+               if((peers - conns) > MAX_DISCONN_PEER_ALERT_THRESHOLD)
                        return "Too many disconnected peers";
-               if(conns > MAX_CONN_THRESHOLD)
+               if(conns > MAX_CONN_ALERT_THRESHOLD)
                        return "Too many open connections";
-               if(peers > MAX_PEER_THRESHOLD)
+               if(peers > MAX_PEER_ALERT_THRESHOLD)
                        return "Too many peers";
-               if(bwlimitDelayTime > MAX_BWLIMIT_DELAY_TIME_THRESHOLD)
+               if(n.bwlimitDelayAlertRelevant && bwlimitDelayTime > 
Node.MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD)
                        return "bwlimitDelayTime too high";
-               if(nodeAveragePingTime > MAX_NODE_AVERAGE_PING_TIME_THRESHOLD)
+               if(n.nodeAveragePingAlertRelevant && nodeAveragePingTime > 
Node.MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD)
                        return "nodeAveragePingTime too high";
-               if(oldestNeverConnectedPeerAge > 
MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_THRESHOLD)
+               if(oldestNeverConnectedPeerAge > 
MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_ALERT_THRESHOLD)
                        return "Never connected peer(s) too old";
                else throw new IllegalArgumentException("Not valid");
        }
@@ -89,17 +84,17 @@
                        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((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 some peers to improve the situation.";
-               } else if(oldestNeverConnectedPeerAge > 
MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_THRESHOLD) {
+               } else if((peers - conns) > MAX_DISCONN_PEER_ALERT_THRESHOLD){ 
+                       s = "This node has too many disconnected peers 
("+(peers - conns)+" > "+MAX_DISCONN_PEER_ALERT_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_ALERT_THRESHOLD) {
+                       s = "This node has too many connections ("+conns+" > 
"+MAX_CONN_ALERT_THRESHOLD+"). We don't encourage such a behaviour; Ubernodes 
are hurting the network.";
+               } else if(peers > MAX_PEER_ALERT_THRESHOLD) {
+                       s = "This node has too many peers ("+peers+" > 
"+MAX_PEER_ALERT_THRESHOLD+"). This will impact your performance as all peers 
(connected or not) consume bandwidth and CPU. Consider \"cleaning up\" your 
peer list.";
+               } else if(n.bwlimitDelayAlertRelevant && bwlimitDelayTime > 
Node.MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD) {
+                       s = "This node has to wait too long for available 
bandwidth ("+bwlimitDelayTime+" > 
"+Node.MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD+").  Increase your output 
bandwidth limit and/or remove some peers to improve the situation.";
+               } else if(n.nodeAveragePingAlertRelevant && nodeAveragePingTime 
> Node.MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD) {
+                       s = "This node is having trouble talking with it's 
peers quickly enough ("+nodeAveragePingTime+" > 
"+Node.MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD+").  Decrease your output 
bandwidth limit and/or remove some peers to improve the situation.";
+               } else if(oldestNeverConnectedPeerAge > 
MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_ALERT_THRESHOLD) {
                        s = "One or more of your node's peers have never 
connected in the two weeks since they were added.  Consider removing them since 
they are affecting performance.";
                } else throw new IllegalArgumentException("Not valid");
                return s;
@@ -108,11 +103,11 @@
        public short getPriorityClass() {
                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)
+                               (peers - conns) > 
MAX_DISCONN_PEER_ALERT_THRESHOLD ||
+                               conns > MAX_CONN_ALERT_THRESHOLD ||
+                               peers > MAX_PEER_ALERT_THRESHOLD ||
+                               (n.bwlimitDelayAlertRelevant && 
bwlimitDelayTime > Node.MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD) ||
+                               (n.nodeAveragePingAlertRelevant && 
nodeAveragePingTime > Node.MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD))
                        return UserAlert.CRITICAL_ERROR;
                return UserAlert.ERROR;
        }
@@ -124,12 +119,12 @@
                oldestNeverConnectedPeerAge = (int) 
n.getOldestNeverConnectedPeerAge();
                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 ||
-                               oldestNeverConnectedPeerAge > 
MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_THRESHOLD) &&
+                               (peers - conns) > 
MAX_DISCONN_PEER_ALERT_THRESHOLD ||
+                               conns > MAX_CONN_ALERT_THRESHOLD ||
+                               peers > MAX_PEER_ALERT_THRESHOLD ||
+                               (n.bwlimitDelayAlertRelevant && 
bwlimitDelayTime > Node.MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD) ||
+                               (n.nodeAveragePingAlertRelevant && 
nodeAveragePingTime > Node.MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD) ||
+                               oldestNeverConnectedPeerAge > 
MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_ALERT_THRESHOLD) &&
                                isValid;
        }



Reply via email to