Author: toad
Date: 2008-06-20 16:21:47 +0000 (Fri, 20 Jun 2008)
New Revision: 20529

Modified:
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
Log:
Express as a native query. Maybe it won't get so bogged down this way?

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-20 15:46:05 UTC (rev 20528)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-20 16:21:47 UTC (rev 20529)
@@ -3,6 +3,7 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.client.async;

+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;

@@ -426,12 +427,26 @@
        class RegisterMeRunner implements DBJob {

                public void run(ObjectContainer container, ClientContext 
context) {
-                       Query query = container.query();
-                       query.constrain(RegisterMe.class);
-                       
query.descend("core").constrain(ClientRequestSchedulerCore.this);
-                       query.descend("priority").orderAscending();
-                       query.descend("addedTime").orderAscending();
-                       ObjectSet result = query.execute();
+                       ObjectSet result = container.query(new Predicate() {
+                               public boolean match(RegisterMe reg) {
+                                       if(reg.core != 
ClientRequestSchedulerCore.this) return false;
+                                       return true;
+                               }
+                       }, new Comparator() {
+                               public int compare(Object arg0, Object arg1) {
+                                       RegisterMe reg0 = (RegisterMe) arg0;
+                                       RegisterMe reg1 = (RegisterMe) arg1;
+                                       if(reg0.priority > reg1.priority)
+                                               return -1; // First is lower 
priority, so use the second.
+                                       if(reg0.priority < reg1.priority)
+                                               return 1; // First is lower 
priority, so use the second.
+                                       if(reg0.addedTime > reg1.addedTime)
+                                               return -1; // Second was added 
earlier
+                                       if(reg0.addedTime < reg1.addedTime)
+                                               return 1;
+                                       return 0;
+                               }
+                       });
                        while(result.hasNext()) {
                                RegisterMe reg = (RegisterMe) result.next();
                                if(logMINOR)


Reply via email to