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;