Author: toad
Date: 2008-06-30 12:21:52 +0000 (Mon, 30 Jun 2008)
New Revision: 20871

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
   branches/db4o/freenet/src/freenet/node/RequestScheduler.java
   branches/db4o/freenet/src/freenet/node/RequestStarter.java
Log:
Don't query for the PersistentChosenRequest, pass it in and delete it.
Delete it even if there is no key.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-06-29 17:21:26 UTC (rev 20870)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-06-30 12:21:52 UTC (rev 20871)
@@ -752,8 +752,8 @@
                return schedCore;
        }

-       public void removeFetchingKey(Key key) {
-               schedCore.removeFetchingKey(key);
+       public void removeFetchingKey(Key key, ChosenRequest req) {
+               schedCore.removeFetchingKey(key, req);
        }

        public void callFailure(final SendableGet get, final 
LowLevelGetException e, final Object keyNum, int prio, final ChosenRequest req) 
{

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-29 17:21:26 UTC (rev 20870)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-30 12:21:52 UTC (rev 20871)
@@ -568,25 +568,19 @@
                }
        }

-       public void removeFetchingKey(final Key key) {
+       public void removeFetchingKey(final Key key, final ChosenRequest req) {
+               if(key != null) {
                synchronized(keysFetching) {
                        keysFetching.remove(key);
                }
+               }
+               if(req != null && req.isPersistent()) {
                sched.clientContext.jobRunner.queue(new DBJob() {
                        public void run(ObjectContainer container, 
ClientContext context) {
-                               ObjectSet results = container.query(new 
Predicate() {
-                                       public boolean 
match(PersistentChosenRequest req) {
-                                               if(req.core != 
ClientRequestSchedulerCore.this) return false;
-                                               return req.key.equals(key);
-                                       }
-                               });
-                               if(results.hasNext()) {
-                                       PersistentChosenRequest req = 
(PersistentChosenRequest) results.next();
-                                       container.delete(req);
-                                       container.commit();
-                               }
+                               container.delete(req);
                        }
-               }, NativeThread.NORM_PRIORITY, false);
+               }, NativeThread.NORM_PRIORITY+1, false);
+               }
        }

        protected Set makeSetForAllRequestsByClientRequest(ObjectContainer 
container) {

Modified: branches/db4o/freenet/src/freenet/node/RequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/RequestScheduler.java        
2008-06-29 17:21:26 UTC (rev 20870)
+++ branches/db4o/freenet/src/freenet/node/RequestScheduler.java        
2008-06-30 12:21:52 UTC (rev 20871)
@@ -55,7 +55,7 @@

        public KeysFetchingLocally fetchingKeys();

-       public void removeFetchingKey(Key key);
+       public void removeFetchingKey(Key key, ChosenRequest req);

        /** Call onFailure() on the database thread, then delete the 
PersistentChosenRequest. For a non-persistent request, 
         * just call onFailure() immediately. */

Modified: branches/db4o/freenet/src/freenet/node/RequestStarter.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/RequestStarter.java  2008-06-29 
17:21:26 UTC (rev 20870)
+++ branches/db4o/freenet/src/freenet/node/RequestStarter.java  2008-06-30 
12:21:52 UTC (rev 20871)
@@ -231,7 +231,7 @@

        private boolean startRequest(ChosenRequest req, boolean logMINOR) {
                if((!req.isPersistent()) && req.request.isCancelled(null)) {
-                       sched.removeFetchingKey(req.key);
+                       sched.removeFetchingKey(req.key, req);
                        return false;
                }
                if(logMINOR) Logger.minor(this, "Running request "+req+" 
priority "+req.prio);
@@ -274,9 +274,7 @@
                        if(Logger.shouldLog(Logger.MINOR, this)) 
                                Logger.minor(this, "Finished "+req);
                        } finally {
-                               if(!isInsert) {
-                                       sched.removeFetchingKey(key);
-                               }
+                                       sched.removeFetchingKey(key, req);
                        }
                }



Reply via email to