Author: toad
Date: 2008-05-29 23:58:05 +0000 (Thu, 29 May 2008)
New Revision: 20141
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
Log:
Add to pendingKeys just before registering the request on the queues, for
persistent requests.
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-05-29 23:43:06 UTC (rev 20140)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-05-29 23:58:05 UTC (rev 20141)
@@ -153,7 +153,6 @@
logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Registering "+req, new
Exception("debug"));
boolean persistent = req.persistent();
- Vector pending = null;
if(isInsertScheduler != (req instanceof SendableInsert))
throw new IllegalArgumentException("Expected a
SendableInsert: "+req);
if(req instanceof SendableGet) {
@@ -176,13 +175,9 @@
if(block == null)
block =
node.fetchKey(key, getter.dontCache());
if(block == null) {
- if(persistent) {
-
if(pending == null)
-
pending = new Vector(keyTokens.length - i);
-
pending.add(key);
- } else {
+ if(!persistent)
{
schedTransient.addPendingKey(key, getter);
- }
+ } // If
persistent, when it is registered (in a later job) the keys will be added first.
} else {
if(logMINOR)
Logger.minor(this, "Got "+block);
@@ -221,17 +216,10 @@
if(!databaseExecutor.onThread()) {
throw new IllegalStateException("Not on
database thread!");
}
- if(pending != null)
- schedCore.addPendingKeys(pending,
(SendableGet) req);
schedCore.queueRegister(req, databaseExecutor);
} else {
- final Vector pendingKeys = pending;
- if(pending != null)
- pending.setSize(pending.size());
databaseExecutor.execute(new Runnable() {
public void run() {
- if(pendingKeys != null)
-
schedCore.addPendingKeys(pendingKeys, (SendableGet) req);
schedCore.queueRegister(req,
databaseExecutor);
}
}, NativeThread.NORM_PRIORITY, "Add persistent
job to queue");
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
2008-05-29 23:43:06 UTC (rev 20140)
+++
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
2008-05-29 23:58:05 UTC (rev 20141)
@@ -349,6 +349,8 @@
container.delete(reg);
// Don't need to activate, fields should exist?
FIXME
try {
+ if(reg.getter instanceof SendableGet)
+ addPendingKeys((SendableGet)
reg.getter);
innerRegister(reg.getter, random);
} catch (Throwable t) {
Logger.error(this, "Caught "+t+"
running RegisterMeRunner", t);
@@ -369,9 +371,19 @@
databaseExecutor.execute(registerMeRunner,
NativeThread.NORM_PRIORITY, "Register request");
}
- public void addPendingKeys(Vector keys, SendableGet req) {
- for(int i=0;i<keys.size();i++)
- addPendingKey((ClientKey) keys.get(i), req);
+ public void addPendingKeys(SendableGet getter) {
+ Object[] keyTokens = getter.sendableKeys();
+ for(int i=0;i<keyTokens.length;i++) {
+ Object tok = keyTokens[i];
+ ClientKey key = getter.getKey(tok);
+ if(key == null) {
+ if(logMINOR)
+ Logger.minor(this, "No key for "+tok+"
for "+getter+" - already finished?");
+ continue;
+ } else {
+ addPendingKey(key, getter);
+ }
+ }
}
}