Author: zothar
Date: 2006-06-08 04:42:51 +0000 (Thu, 08 Jun 2006)
New Revision: 9081
Modified:
trunk/freenet/src/freenet/node/ARKFetcher.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Limit the node to 30 simultaneous ARK Fetch Requests since we UserAlert at 20
disconnected peers anyway. Don't continue the ARKFetcher.start() routine if
it's already been started and hasn't stopped yet.
Modified: trunk/freenet/src/freenet/node/ARKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetcher.java 2006-06-08 04:06:33 UTC
(rev 9080)
+++ trunk/freenet/src/freenet/node/ARKFetcher.java 2006-06-08 04:42:51 UTC
(rev 9081)
@@ -30,6 +30,7 @@
private int backoff = MIN_BACKOFF;
private String identity;
private boolean isFetching = false;
+ private boolean started = false;
public ARKFetcher(PeerNode peer, Node node) {
this.peer = peer;
@@ -46,6 +47,10 @@
*/
public synchronized void start() {
ClientGetter cg = null;
+ if(started) { // We only need one ARKFetcher per PeerNode
+ return;
+ }
+ started = true;
// Start fetch
shouldRun = true;
if(getter == null) {
@@ -83,6 +88,7 @@
Logger.minor(this, "Cancelling ARK fetch for "+peer);
shouldRun = false;
synchronized(this){
+ started = false;
if(isFetching) {
node.removeARKFetcher(identity,this);
isFetching = false;
@@ -94,6 +100,7 @@
public synchronized void onSuccess(FetchResult result, ClientGetter
state) {
Logger.minor(this, "Fetched ARK for "+peer, new
Exception("debug"));
+ started = false;
// Fetcher context specifies an upper bound on size.
backoff = MIN_BACKOFF;
@@ -124,6 +131,7 @@
}
public synchronized void onFailure(FetchException e, ClientGetter
state) {
+ started = false;
Logger.minor(this, "Failed to fetch ARK for "+peer+" : "+e, e);
if(isFetching) {
@@ -145,7 +153,7 @@
Logger.minor(this, "Failed to fetch ARK for "+peer+", now
backing off ARK fetches for "+(int) (backoff / 1000)+" seconds");
// We may be on the PacketSender thread.
// FIXME should this be exponential backoff?
- node.ps.queueTimedJob(new FastRunnable() { public void run() {
start(); }}, backoff);
+ node.ps.queueTimedJob(new Runnable() { public void run() {
start(); }}, backoff); // Runnable rather than FastRunnable so we don't put
ourselves on the PacketSender thread anyway
}
public void onSuccess(BaseClientPutter state) {
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-06-08 04:06:33 UTC
(rev 9080)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-06-08 04:42:51 UTC
(rev 9081)
@@ -843,13 +843,19 @@
this.handshakeCount++;
}
// Don't fetch ARKs for peers we have verified (through handshake) to
be incompatible with us
- if(handshakeCount == MAX_HANDSHAKE_COUNT &&
!(verifiedIncompatibleOlderVersion || verifiedIncompatibleNewerVersion)) {
- Logger.normal( this, "Starting ARK Fetcher after
"+handshakeCount+" failed handshakes for "+getPeer()+" with identity
'"+getIdentityString()+"'");
- long arkFetcherStartTime1 = System.currentTimeMillis();
- arkFetcher.start();
- long arkFetcherStartTime2 = System.currentTimeMillis();
- if((arkFetcherStartTime2 - arkFetcherStartTime1) > 500)
- Logger.normal(this, "arkFetcherStartTime2 is more than
half a second after arkFetcherStartTime1 ("+(arkFetcherStartTime2 -
arkFetcherStartTime1)+") working on "+myName);
+ if(handshakeCount >= MAX_HANDSHAKE_COUNT &&
!(verifiedIncompatibleOlderVersion || verifiedIncompatibleNewerVersion)) {
+ int numARKFetchers = node.getNumARKFetchers();
+ if( numARKFetchers >= 30 ) { // Limit concurrent ARK Fetch
Requests to 30 since we UserAlert at 20 disconnected peers anyway
+ Logger.minor( this, "Not starting ARK Fetcher
after "+handshakeCount+" failed handshakes for "+getPeer()+" with identity
'"+getIdentityString()+"' because there are already 30 ARK Fetchers running.");
+ } else {
+ Logger.normal( this, "Starting ARK Fetcher
after "+handshakeCount+" failed handshakes for "+getPeer()+" with identity
'"+getIdentityString()+"'");
+ long arkFetcherStartTime1 =
System.currentTimeMillis();
+ arkFetcher.start();
+ long arkFetcherStartTime2 =
System.currentTimeMillis();
+ if((arkFetcherStartTime2 -
arkFetcherStartTime1) > 500) {
+ Logger.normal(this,
"arkFetcherStartTime2 is more than half a second after arkFetcherStartTime1
("+(arkFetcherStartTime2 - arkFetcherStartTime1)+") working on "+myName);
+ }
+ }
}
}