Author: toad
Date: 2008-07-19 18:42:08 +0000 (Sat, 19 Jul 2008)
New Revision: 21263

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
Log:
Boost priority of RegisterMeRunner if the scheduler's queue is nearly empty.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-07-19 18:00:01 UTC (rev 21262)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-07-19 18:42:08 UTC (rev 21263)
@@ -157,7 +157,7 @@
                registerInsert(req, persistent, regmeOnly, 
databaseExecutor.onThread());
        }

-       static final int QUEUE_THRESHOLD = 250;
+       static final int QUEUE_THRESHOLD = 100;

        public void registerInsert(final SendableRequest req, boolean 
persistent, boolean regmeOnly, boolean onDatabaseThread) {
                if(persistent) {
@@ -1019,6 +1019,12 @@
        public long countPersistentQueuedRequests(ObjectContainer container) {
                return schedCore.countQueuedRequests(container);
        }
+
+       public boolean isQueueAlmostEmpty() {
+               synchronized(starterQueue) {
+                       return this.starterQueue.size() < 
MAX_STARTER_QUEUE_SIZE / 4;
+               }
+       }


 }

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-07-19 18:00:01 UTC (rev 21262)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-07-19 18:42:08 UTC (rev 21263)
@@ -194,7 +194,9 @@
                                Logger.minor(this, "RegisterMe query took 
"+(tEnd-tStart)+" hasNext="+registerMeSet.hasNext()+" for 
insert="+isInsertScheduler+" ssk="+isSSKScheduler);
 //                             if(logMINOR)
 //                                     Logger.minor(this, "RegisterMe query 
returned: "+registerMeSet.size());
-                               context.jobRunner.queue(registerMeRunner, 
NativeThread.NORM_PRIORITY, true);
+                               boolean boost = 
ClientRequestSchedulerCore.this.sched.isQueueAlmostEmpty();
+
+                               context.jobRunner.queue(registerMeRunner, 
(NativeThread.NORM_PRIORITY-1) + (boost ? 2 : 0), true);
                        }

                };
@@ -664,8 +666,9 @@
                                }
                                if(System.currentTimeMillis() > deadline) break;
                        }
+                       boolean boost = sched.isQueueAlmostEmpty();
                        if(registerMeSet.hasNext())
-                               context.jobRunner.queue(registerMeRunner, 
NativeThread.NORM_PRIORITY-1, true);
+                               context.jobRunner.queue(registerMeRunner, 
(NativeThread.NORM_PRIORITY-1) + (boost ? 2 : 0), true);
                        else {
                                if(logMINOR) Logger.minor(this, 
"RegisterMeRunner finished");
                                boolean rerun;


Reply via email to