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 {


Reply via email to