Author: toad
Date: 2008-02-23 19:40:43 +0000 (Sat, 23 Feb 2008)
New Revision: 18137
Modified:
trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
trunk/freenet/src/freenet/node/FailureTable.java
trunk/freenet/src/freenet/node/Node.java
Log:
Don't remove the key from the offeredKeys list-of-keys-to-fetch unless not only
do we not want it, but also none of our neighbours wants it either.
Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-02-23 19:39:44 UTC (rev 18136)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-02-23 19:40:43 UTC (rev 18137)
@@ -536,7 +536,7 @@
}
}
}
- if(dropped && offeredKeys != null) {
+ if(dropped && offeredKeys != null && !node.peersWantKey(key)) {
for(int i=0;i<offeredKeys.length;i++)
offeredKeys[i].remove(key);
}
Modified: trunk/freenet/src/freenet/node/FailureTable.java
===================================================================
--- trunk/freenet/src/freenet/node/FailureTable.java 2008-02-23 19:39:44 UTC
(rev 18136)
+++ trunk/freenet/src/freenet/node/FailureTable.java 2008-02-23 19:40:43 UTC
(rev 18137)
@@ -492,4 +492,13 @@
}
+ public boolean peersWantKey(Key key) {
+ FailureTableEntry entry;
+ synchronized(this) {
+ entry = (FailureTableEntry) entriesByKey.get(key);
+ if(entry == null) return false; // Nobody cares
+ }
+ return entry.othersWant(null);
+ }
+
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-02-23 19:39:44 UTC (rev
18136)
+++ trunk/freenet/src/freenet/node/Node.java 2008-02-23 19:40:43 UTC (rev
18137)
@@ -3266,4 +3266,8 @@
public void setLocation(double loc) {
lm.setLocation(loc);
}
+
+ public boolean peersWantKey(Key key) {
+ return failureTable.peersWantKey(key);
+ }
}