[freenet-cvs] r17472 - trunk/freenet/src/freenet/node

toad at freenetproject.org toad at freenetproject.org
Sat Feb 2 16:06:24 UTC 2008


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 {




More information about the cvs mailing list