Author: toad
Date: 2008-06-26 17:42:11 +0000 (Thu, 26 Jun 2008)
New Revision: 20766
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
SendableGet's are likely to be deactivated while we are checking the datastore.
Pass in EVERYTHING.
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-06-26 17:33:54 UTC (rev 20765)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-06-26 17:42:11 UTC (rev 20766)
@@ -4,6 +4,7 @@
package freenet.client.async;
import java.util.LinkedList;
+import java.util.Set;
import com.db4o.ObjectContainer;
@@ -180,10 +181,12 @@
keys[i] = getter.getKey(keyTokens[i],
selectorContainer);
selectorContainer.activate(keys[i], 5);
}
+ final BlockSet blocks =
getter.getContext().blocks;
+ final boolean dontCache = getter.dontCache();
datastoreCheckerExecutor.execute(new Runnable()
{
public void run() {
- registerCheckStore(getter,
true, keyTokens, keys, reg);
+ registerCheckStore(getter,
true, keyTokens, keys, reg, blocks, dontCache);
}
}, getter.getPriorityClass(selectorContainer),
"Checking datastore");
@@ -200,10 +203,12 @@
keys[i] =
getter.getKey(keyTokens[i], selectorContainer);
container.activate(keys[i], 5);
}
+ final BlockSet blocks =
getter.getContext().blocks;
+ final boolean dontCache =
getter.dontCache();
datastoreCheckerExecutor.execute(new Runnable() {
public void run() {
-
registerCheckStore(getter, true, keyTokens, keys, reg);
+
registerCheckStore(getter, true, keyTokens, keys, reg, blocks, dontCache);
}
},
getter.getPriorityClass(container), "Checking datastore");
@@ -221,7 +226,7 @@
datastoreCheckerExecutor.execute(new Runnable()
{
public void run() {
- registerCheckStore(getter,
false, keyTokens, keys, null);
+ registerCheckStore(getter,
false, keyTokens, keys, null, getter.getContext().blocks, getter.dontCache());
}
}, getter.getPriorityClass(null), "Checking
datastore");
@@ -256,10 +261,11 @@
* been set up, and this is run on the datastore checker thread. Once
completed, this should
* (for a persistent request) queue a job on the databaseExecutor and
(for a transient
* request) finish registering the request immediately.
- * @param getter
+ * @param getter The SendableGet. NOTE: If persistent, DO NOT USE THIS
INLINE, because it won't
+ * be activated. This is why we pass in extraBlocks and dontCache.
* @param reg
*/
- protected void registerCheckStore(SendableGet getter, boolean
persistent, Object[] keyTokens, ClientKey[] keys, RegisterMe reg) {
+ protected void registerCheckStore(SendableGet getter, boolean
persistent, Object[] keyTokens, ClientKey[] keys, RegisterMe reg, BlockSet
extraBlocks, boolean dontCache) {
boolean anyValid = false;
for(int i=0;i<keyTokens.length;i++) {
Object tok = keyTokens[i];
@@ -271,10 +277,10 @@
Logger.minor(this, "No key for
"+tok+" for "+getter+" - already finished?");
continue;
} else {
- if(getter.getContext().blocks != null)
- block =
getter.getContext().blocks.get(key);
+ if(extraBlocks != null)
+ block = extraBlocks.get(key);
if(block == null)
- block = node.fetchKey(key,
getter.dontCache());
+ block = node.fetchKey(key,
dontCache);
if(block == null) {
if(!persistent) {
schedTransient.addPendingKey(key, getter);