Author: toad
Date: 2008-07-12 23:31:27 +0000 (Sat, 12 Jul 2008)
New Revision: 21126

Modified:
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
Log:
I am reasonably sure this fixes Cooo's OOM problem.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-07-12 23:12:17 UTC (rev 21125)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-07-12 23:31:27 UTC (rev 21126)
@@ -156,24 +156,27 @@
                                Query query = container.query();
                                query.constrain(RegisterMe.class);
                                /**
-                                * Another db4o bug. This doesn't return 
anything unless I move all the constraints into
-                                * the Evaluation. Getting rid of the indexes 
might help. Or upgrading to a fixed version
-                                * of db4o?? :<
+                                * FIXME DB4O
+                                * db4o says it has indexed core. But then when 
we try to query, it produces a diagnostic
+                                * suggesting we index it. And of course the 
query takes ages and uses tons of RAM. So don't
+                                * try to filter by core at this point, deal 
with that later.
                                 */
 //                             
query.descend("core").constrain(ClientRequestSchedulerCore.this);
-                               Evaluation eval = new Evaluation() {
-
-                                       public void evaluate(Candidate 
candidate) {
-                                               RegisterMe reg = (RegisterMe) 
candidate.getObject();
-                                               if(reg.key.addedTime > initTime 
|| reg.core != ClientRequestSchedulerCore.this) {
-                                                       
candidate.include(false);
-                                               } else {
-                                                       candidate.include(true);
-                                               }
-                                       }
-                                       
-                               };
-                               query.constrain(eval);
+//                             Evaluation eval = new Evaluation() {
+//
+//                                     public void evaluate(Candidate 
candidate) {
+//                                             RegisterMe reg = (RegisterMe) 
candidate.getObject();
+//                                             if(reg.key.addedTime > initTime 
|| reg.core != ClientRequestSchedulerCore.this) {
+//                                                     
candidate.include(false);
+//                                                     
candidate.objectContainer().deactivate(reg.key, 1);
+//                                                     
candidate.objectContainer().deactivate(reg, 1);
+//                                             } else {
+//                                                     candidate.include(true);
+//                                             }
+//                                     }
+//                                     
+//                             };
+//                             query.constrain(eval);
 //                             
query.descend("key").descend("priority").orderAscending();
 //                             
query.descend("key").descend("addedTime").orderAscending();
                                registerMeSet = query.execute();
@@ -575,6 +578,18 @@
                                }
                                long startNext = System.currentTimeMillis();
                                RegisterMe reg = (RegisterMe) 
registerMeSet.next();
+                               if(reg.core != ClientRequestSchedulerCore.this) 
{
+                                       Logger.error(this, "Ignoring RegisterMe 
as doesn't belong to me: my insert="+isInsertScheduler+" my 
ssk="+isSSKScheduler+" his insert="+reg.core.isInsertScheduler+" his 
ssk="+reg.core.isSSKScheduler);
+                                       container.deactivate(reg, 1);
+                                       continue; // Don't delete.
+                               }
+                               container.activate(reg.key, 1);
+                               if(reg.key.addedTime > initTime) {
+                                       if(logMINOR) Logger.minor(this, 
"Ignoring RegisterMe as created since startup");
+                                       container.deactivate(reg.key, 1);
+                                       container.deactivate(reg, 1);
+                                       continue; // Don't delete
+                               }
                                long endNext = System.currentTimeMillis();
                                if(logMINOR)
                                        Logger.minor(this, "RegisterMe: next() 
took "+(endNext-startNext));


Reply via email to