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


Reply via email to