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);
+                       }
+               }
        }

 }


Reply via email to