Author: toad
Date: 2008-06-28 13:28:44 +0000 (Sat, 28 Jun 2008)
New Revision: 20839
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
Log:
Don't queue transient requests, only persistent ones.
Since we replace with a transient request.
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-06-28 11:14:02 UTC (rev 20838)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-06-28 13:28:44 UTC (rev 20839)
@@ -404,7 +404,7 @@
schedTransient.addPendingKey(key, getter);
}
- private synchronized ChosenRequest removeFirst(ObjectContainer
container) {
+ private synchronized ChosenRequest removeFirst(ObjectContainer
container, boolean transientOnly, boolean notTransient) {
if(!databaseExecutor.onThread()) {
throw new IllegalStateException("Not on database
thread!");
}
@@ -414,7 +414,7 @@
else if(PRIORITY_HARD.equals(choosenPriorityScheduler))
fuzz = 0;
// schedCore juggles both
- return schedCore.removeFirst(fuzz, random, offeredKeys,
starter, schedTransient, false, Short.MAX_VALUE, Short.MAX_VALUE,
clientContext, container);
+ return schedCore.removeFirst(fuzz, random, offeredKeys,
starter, schedTransient, transientOnly, notTransient, Short.MAX_VALUE,
Short.MAX_VALUE, clientContext, container);
}
public ChosenRequest getBetterNonPersistentRequest(ChosenRequest req) {
@@ -424,10 +424,10 @@
else if(PRIORITY_HARD.equals(choosenPriorityScheduler))
fuzz = 0;
if(req == null)
- return schedCore.removeFirst(fuzz, random, offeredKeys,
starter, schedTransient, true, Short.MAX_VALUE, Integer.MAX_VALUE,
clientContext, null);
+ return schedCore.removeFirst(fuzz, random, offeredKeys,
starter, schedTransient, true, false, Short.MAX_VALUE, Integer.MAX_VALUE,
clientContext, null);
short prio = req.prio;
int retryCount = req.request.getRetryCount();
- return schedCore.removeFirst(fuzz, random, offeredKeys,
starter, schedTransient, true, prio, retryCount, clientContext, null);
+ return schedCore.removeFirst(fuzz, random, offeredKeys,
starter, schedTransient, true, false, prio, retryCount, clientContext, null);
}
private static final int MAX_STARTER_QUEUE_SIZE = 100;
@@ -462,7 +462,7 @@
}
}
while(true) {
- req = removeFirst(container);
+ req = removeFirst(container, false, true);
if(req == null) return;
container.activate(req.key, 5);
container.activate(req.ckey, 5);
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
2008-06-28 11:14:02 UTC (rev 20838)
+++
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
2008-06-28 13:28:44 UTC (rev 20839)
@@ -238,8 +238,8 @@
// We prevent a number of race conditions (e.g. adding a retry count
and then another
// thread removes it cos its empty) ... and in addToGrabArray etc we
already sync on this.
// The worry is ... is there any nested locking outside of the
hierarchy?
- ChosenRequest removeFirst(int fuzz, RandomSource random,
OfferedKeysList[] offeredKeys, RequestStarter starter,
ClientRequestSchedulerNonPersistent schedTransient, boolean transientOnly,
short maxPrio, int retryCount, ClientContext context, ObjectContainer
container) {
- SendableRequest req = removeFirstInner(fuzz, random,
offeredKeys, starter, schedTransient, transientOnly, maxPrio, retryCount,
context, container);
+ ChosenRequest removeFirst(int fuzz, RandomSource random,
OfferedKeysList[] offeredKeys, RequestStarter starter,
ClientRequestSchedulerNonPersistent schedTransient, boolean transientOnly,
boolean notTransient, short maxPrio, int retryCount, ClientContext context,
ObjectContainer container) {
+ SendableRequest req = removeFirstInner(fuzz, random,
offeredKeys, starter, schedTransient, transientOnly, notTransient, maxPrio,
retryCount, context, container);
if(req == null) return null;
Object token = req.chooseKey(this, req.persistent() ? container
: null, context);
if(token == null) {
@@ -278,7 +278,7 @@
}
}
- SendableRequest removeFirstInner(int fuzz, RandomSource random,
OfferedKeysList[] offeredKeys, RequestStarter starter,
ClientRequestSchedulerNonPersistent schedTransient, boolean transientOnly,
short maxPrio, int retryCount, ClientContext context, ObjectContainer
container) {
+ SendableRequest removeFirstInner(int fuzz, RandomSource random,
OfferedKeysList[] offeredKeys, RequestStarter starter,
ClientRequestSchedulerNonPersistent schedTransient, boolean transientOnly,
boolean notTransient, short maxPrio, int retryCount, ClientContext context,
ObjectContainer container) {
// Priorities start at 0
if(logMINOR) Logger.minor(this, "removeFirst()");
boolean tryOfferedKeys = offeredKeys != null &&
random.nextBoolean();
@@ -301,7 +301,9 @@
SortedVectorByNumber perm = null;
if(!transientOnly)
perm = priorities[choosenPriorityClass];
- SortedVectorByNumber trans =
schedTransient.priorities[choosenPriorityClass];
+ SortedVectorByNumber trans = null;
+ if(!notTransient)
+ trans = schedTransient.priorities[choosenPriorityClass];
if(perm == null && trans == null) {
if(logMINOR) Logger.minor(this, "No requests to run:
chosen priority empty");
continue; // Try next priority