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();
}