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