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)