Author: toad
Date: 2008-06-20 18:37:18 +0000 (Fri, 20 Jun 2008)
New Revision: 20534

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
   branches/db4o/freenet/src/freenet/node/RequestStarter.java
   branches/db4o/freenet/src/freenet/support/SortedVectorByNumber.java
Log:
Store SortedVectorByNumber (retry counts within a priority) when it is updated.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-06-20 18:06:45 UTC (rev 20533)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-06-20 18:37:18 UTC (rev 20534)
@@ -383,6 +383,10 @@

        private Runnable requestStarterQueueFiller = new Runnable() {
                public void run() {
+                       if(isInsertScheduler && !isSSKScheduler) {
+                               if(logMINOR) Logger.minor(this, "Scheduling 
inserts...");
+                       }
+                       if(logMINOR) Logger.minor(this, "Filling request 
queue... (SSK="+isSSKScheduler+" insert="+isInsertScheduler);
                        ChosenRequest req = null;
                        while(true) {
                                req = removeFirst();

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-06-20 18:06:45 UTC (rev 20533)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-06-20 18:37:18 UTC (rev 20534)
@@ -252,14 +252,16 @@
                // Priority
                SortedVectorByNumber prio = priorities[priorityClass];
                if(prio == null) {
-                       prio = new SortedVectorByNumber();
+                       prio = new SortedVectorByNumber(persistent());
                        priorities[priorityClass] = prio;
+                       if(persistent())
+                               container.set(this);
                }
                // Client
                SectoredRandomGrabArrayWithInt clientGrabber = 
(SectoredRandomGrabArrayWithInt) prio.get(rc);
                if(clientGrabber == null) {
                        clientGrabber = new 
SectoredRandomGrabArrayWithInt(random, rc, persistent(), container);
-                       prio.add(clientGrabber);
+                       prio.add(clientGrabber, container);
                        if(logMINOR) Logger.minor(this, "Registering retry 
count "+rc+" with prioclass "+priorityClass+" on "+clientGrabber+" for "+prio);
                }
                // SectoredRandomGrabArrayWithInt and lower down have 
hierarchical locking and auto-remove.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-20 18:06:45 UTC (rev 20533)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-20 18:37:18 UTC (rev 20534)
@@ -291,7 +291,7 @@
                                Logger.minor(this, "Got retry count tracker 
"+chosenTracker);
                        SendableRequest req = (SendableRequest) 
chosenTracker.removeRandom(starter, container, context);
                        if(chosenTracker.isEmpty()) {
-                               trackerParent.remove(chosenTracker.getNumber());
+                               trackerParent.remove(chosenTracker.getNumber(), 
container);
                                if(trackerParent.isEmpty()) {
                                        if(logMINOR) Logger.minor(this, "Should 
remove priority");
                                }

Modified: branches/db4o/freenet/src/freenet/node/RequestStarter.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/RequestStarter.java  2008-06-20 
18:06:45 UTC (rev 20533)
+++ branches/db4o/freenet/src/freenet/node/RequestStarter.java  2008-06-20 
18:37:18 UTC (rev 20534)
@@ -165,7 +165,7 @@
                                        req = getRequest();
                                        if(req == null) {
                                                try {
-                                                       wait(100*1000); // as 
close to indefinite as I'm comfortable with! Toad
+                                                       wait(1*1000); // as 
close to indefinite as I'm comfortable with! Toad
                                                } catch (InterruptedException 
e) {
                                                        // Ignore
                                                }

Modified: branches/db4o/freenet/src/freenet/support/SortedVectorByNumber.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/SortedVectorByNumber.java 
2008-06-20 18:06:45 UTC (rev 20533)
+++ branches/db4o/freenet/src/freenet/support/SortedVectorByNumber.java 
2008-06-20 18:37:18 UTC (rev 20534)
@@ -3,6 +3,8 @@
 import java.util.Arrays;
 import java.util.Comparator;

+import com.db4o.ObjectContainer;
+
 /**
  * Map of an integer to an element, based on a sorted Vector.
  * Note that we have to shuffle data around, so this is slowish if it gets big.
@@ -13,10 +15,12 @@
        private int length;
        private static final Comparator comparator = new 
SimpleIntNumberedItemComparator(true);
        private static final int MIN_SIZE = 4;
+       private final boolean persistent;

-       public SortedVectorByNumber() {
+       public SortedVectorByNumber(boolean persistent) {
                this.data = new IntNumberedItem[MIN_SIZE];
                length = 0;
+               this.persistent = persistent;
        }

        public synchronized IntNumberedItem getFirst() {
@@ -35,7 +39,7 @@
                return null;
        }

-       public synchronized void remove(int item) {
+       public synchronized void remove(int item, ObjectContainer container) {
                int x = Arrays.binarySearch(data, new Integer(item), 
comparator);
                if(x >= 0) {
                        if(x < length-1)
@@ -47,6 +51,7 @@
                        System.arraycopy(data, 0, newData, 0, length);
                        data = newData;
                }
+               if(persistent) container.set(this);
                verify();
        }

@@ -69,16 +74,16 @@
         * Add the item, if it (or an item of the same number) is not already 
present.
         * @return True if we added the item.
         */
-       public synchronized boolean push(IntNumberedItem grabber) {
+       public synchronized boolean push(IntNumberedItem grabber, 
ObjectContainer container) {
                int x = Arrays.binarySearch(data, new 
Integer(grabber.getNumber()), comparator);
                if(x >= 0) return false;
                // insertion point
                x = -x-1;
-               push(grabber, x);
+               push(grabber, x, container);
                return true;
        }

-       public synchronized void add(IntNumberedItem grabber) {
+       public synchronized void add(IntNumberedItem grabber, ObjectContainer 
container) {
                int x = Arrays.binarySearch(data, new 
Integer(grabber.getNumber()), comparator);
                if(x >= 0) {
                        if(grabber != data[x])
@@ -87,10 +92,10 @@
                }
                // insertion point
                x = -x-1;
-               push(grabber, x);
+               push(grabber, x, container);
        }

-       private synchronized void push(IntNumberedItem grabber, int x) {
+       private synchronized void push(IntNumberedItem grabber, int x, 
ObjectContainer container) {
                boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR) Logger.minor(this, "Insertion point: "+x);
                // Move the data
@@ -104,6 +109,8 @@
                        System.arraycopy(data, x, data, x+1, length-x);
                data[x] = grabber;
                length++;
+               if(persistent)
+                       container.set(this);
                verify();
        }



Reply via email to