Author: toad
Date: 2008-02-02 16:06:24 +0000 (Sat, 02 Feb 2008)
New Revision: 17472
Modified:
trunk/freenet/src/freenet/node/FailureTableEntry.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/RequestSender.java
Log:
ULPRs: Wire FailureTable into Node (onFound()) and RequestSender (onFailure()).
FailureTable is untested code, we might be looking at memory leaks etc.
Modified: trunk/freenet/src/freenet/node/FailureTableEntry.java
===================================================================
--- trunk/freenet/src/freenet/node/FailureTableEntry.java 2008-02-02
16:00:49 UTC (rev 17471)
+++ trunk/freenet/src/freenet/node/FailureTableEntry.java 2008-02-02
16:06:24 UTC (rev 17472)
@@ -74,7 +74,8 @@
timeoutTime = newTimeoutTime;
}
addRequestors(requestors, now);
- addRequestedFrom(new PeerNode[] { requested }, now);
+ if(requested != null)
+ addRequestedFrom(new PeerNode[] { requested },
now);
}
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-02-02 16:00:49 UTC (rev
17471)
+++ trunk/freenet/src/freenet/node/Node.java 2008-02-02 16:06:24 UTC (rev
17472)
@@ -396,6 +396,9 @@
public final NodeClientCore clientCore;
+ // ULPRs, RecentlyFailed, per node failure tables, are all managed by
FailureTable.
+ final FailureTable failureTable;
+
// The version we were before we restarted.
public int lastVersion;
@@ -861,6 +864,10 @@
peers.writePeers();
peers.updatePMUserAlert();
+ // ULPRs
+
+ failureTable = new FailureTable(peers, this);
+
// Opennet
final SubConfig opennetConfig = new SubConfig("node.opennet",
config);
@@ -1979,6 +1986,7 @@
nodeStats.avgCacheLocation.report(loc);
if(clientCore != null && clientCore.requestStarters !=
null)
clientCore.requestStarters.chkFetchScheduler.tripPendingKey(block);
+ failureTable.onFound(block);
} catch (IOException e) {
Logger.error(this, "Cannot store data: "+e, e);
} catch (OutOfMemoryError e) {
@@ -2010,7 +2018,7 @@
cacheKey(((NodeSSK)block.getKey()).getPubKeyHash(),
((NodeSSK)block.getKey()).getPubKey(), deep);
if(clientCore != null && clientCore.requestStarters !=
null)
clientCore.requestStarters.sskFetchScheduler.tripPendingKey(block);
-
+ failureTable.onFound(block);
} catch (IOException e) {
Logger.error(this, "Cannot store data: "+e, e);
} catch (OutOfMemoryError e) {
Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java 2008-02-02 16:00:49 UTC
(rev 17471)
+++ trunk/freenet/src/freenet/node/RequestSender.java 2008-02-02 16:06:24 UTC
(rev 17472)
@@ -181,6 +181,7 @@
// This used to be RNF, I dunno why
//???: finish(GENERATED_REJECTED_OVERLOAD,
null);
finish(DATA_NOT_FOUND, null);
+ node.failureTable.onFailure(key, htl, new PeerNode[] {
source }, null, FailureTable.REJECT_TIME, System.currentTimeMillis());
return;
}
@@ -195,6 +196,7 @@
Logger.minor(this, "no more peers, but
overloads ("+rejectOverloads+"/"+routeAttempts+" overloaded)");
// Backtrack
finish(ROUTE_NOT_FOUND, null);
+ node.failureTable.onFailure(key, htl, new PeerNode[] {
source }, null, -1, System.currentTimeMillis());
return;
}
@@ -346,6 +348,7 @@
next.localRejectedOverload("FatalTimeout");
forwardRejectedOverload();
finish(TIMED_OUT, next);
+ node.failureTable.onFailure(key, htl, new PeerNode[] {
source }, next, -1, System.currentTimeMillis());
return;
}
@@ -356,6 +359,7 @@
if(msg.getSpec() == DMT.FNPDataNotFound) {
next.successNotOverload();
finish(DATA_NOT_FOUND, next);
+ node.failureTable.onFailure(key, htl, new PeerNode[] {
source }, next, FailureTable.REJECT_TIME, System.currentTimeMillis());
return;
}
@@ -417,6 +421,7 @@
// If there is, we will avoid sending requests for the
specified period.
// FIXME we need to create the FT entry.
finish(RECENTLY_FAILED, next);
+ node.failureTable.onFailure(key, htl, new PeerNode[] {
source }, next, timeLeft, System.currentTimeMillis());
return;
}
@@ -482,6 +487,7 @@
} catch (KeyVerifyException e1) {
Logger.normal(this, "Got data
but verify failed: "+e1, e1);
finish(VERIFY_FAILURE, next);
+ node.failureTable.onFailure(key, htl,
new PeerNode[] { source }, next, -1, System.currentTimeMillis());
return;
}
finish(SUCCESS, next);
@@ -492,6 +498,7 @@
else
Logger.error(this, "Transfer failed
("+e.getReason()+"/"+RetrievalException.getErrString(e.getReason())+"): "+e, e);
finish(TRANSFER_FAILED, next);
+ node.failureTable.onFailure(key, htl, new
PeerNode[] { source }, next, -1, System.currentTimeMillis());
return;
}
} finally {