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;
}