Author: nextgens
Date: 2006-07-14 20:33:01 +0000 (Fri, 14 Jul 2006)
New Revision: 9609
Modified:
trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
trunk/freenet/src/freenet/client/async/PrioritySchedulerCallback.java
trunk/freenet/src/freenet/node/Node.java
Log:
Makes the priority handling policy of the scheduler configurable
Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
2006-07-14 19:52:30 UTC (rev 9608)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
2006-07-14 20:33:01 UTC (rev 9609)
@@ -4,6 +4,7 @@
import java.util.HashSet;
import java.util.Iterator;
+import freenet.config.SubConfig;
import freenet.crypt.RandomSource;
import freenet.keys.ClientKeyBlock;
import freenet.keys.KeyVerifyException;
@@ -38,6 +39,7 @@
private final HashMap allRequestsByClientRequest;
private final RequestStarter starter;
private final Node node;
+ public final String name;
public static final String PRIORITY_NONE = "NONE";
public static final String PRIORITY_SOFT = "SOFT";
@@ -90,7 +92,7 @@
RequestStarter.MINIMUM_PRIORITY_CLASS
};
- public ClientRequestScheduler(boolean forInserts, boolean forSSKs,
RandomSource random, RequestStarter starter, Node node) {
+ public ClientRequestScheduler(boolean forInserts, boolean forSSKs,
RandomSource random, RequestStarter starter, Node node, SubConfig sc, String
name) {
this.starter = starter;
this.random = random;
this.node = node;
@@ -99,8 +101,10 @@
priorities = new
SortedVectorByNumber[RequestStarter.NUMBER_OF_PRIORITY_CLASSES];
allRequestsByClientRequest = new HashMap();
- //FIXME implement the config. hook
- this.choosenPriorityScheduler = PRIORITY_HARD;
+ this.name = name;
+ sc.register(name+"_priority_policy", PRIORITY_HARD,
name.hashCode(), true, "Priority policy of the "+name+"scheduler", "Set the
priority policy scheme used by the scheduler. Could be one of
["+PRIORITY_HARD+"|"+PRIORITY_SOFT+"]",
+ new PrioritySchedulerCallback(this));
+ this.choosenPriorityScheduler =
sc.getString(name+"_priority_policy");
}
/** Called by the config. Callback
@@ -263,4 +267,8 @@
starter.notifyAll();
}
}
+
+ public String getChoosenPriorityScheduler() {
+ return choosenPriorityScheduler;
+ }
}
Modified: trunk/freenet/src/freenet/client/async/PrioritySchedulerCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/async/PrioritySchedulerCallback.java
2006-07-14 19:52:30 UTC (rev 9608)
+++ trunk/freenet/src/freenet/client/async/PrioritySchedulerCallback.java
2006-07-14 20:33:01 UTC (rev 9609)
@@ -4,28 +4,25 @@
import freenet.config.StringCallback;
public class PrioritySchedulerCallback implements StringCallback{
- String value;
ClientRequestScheduler cs;
PrioritySchedulerCallback(ClientRequestScheduler cs){
- this.value = ClientRequestScheduler.PRIORITY_HARD;
this.cs = cs;
}
public String get(){
- return value;
+ return cs.getChoosenPriorityScheduler();
}
public void set(String val) throws InvalidConfigValueException{
+ String value;
if(val.equalsIgnoreCase(get())) return;
if(val.equalsIgnoreCase(ClientRequestScheduler.PRIORITY_HARD)){
value = ClientRequestScheduler.PRIORITY_HARD;
}else
if(val.equalsIgnoreCase(ClientRequestScheduler.PRIORITY_SOFT)){
value = ClientRequestScheduler.PRIORITY_SOFT;
- }else
if(val.equalsIgnoreCase(ClientRequestScheduler.PRIORITY_NONE)){
- value = ClientRequestScheduler.PRIORITY_NONE;
}else{
- throw new InvalidConfigValueException("The value
"+val+" isn't valid.");
+ throw new InvalidConfigValueException("Invalid priority
scheme");
}
cs.setPriorityScheduler(value);
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-07-14 19:52:30 UTC (rev
9608)
+++ trunk/freenet/src/freenet/node/Node.java 2006-07-14 20:33:01 UTC (rev
9609)
@@ -1619,14 +1619,7 @@
throw new NodeInitException(EXIT_BAD_DOWNLOADS_DIR,
"Could not find or create default downloads directory");
}
- // Name
- nodeConfig.register("name", myName, sortOrder++, false, "Node
name for darknet", "Node name; you may want to set this to something
descriptive if running on darknet e.g. Fred Blogg's Node; it is visible to any
connecting node",
- new NodeNameCallback(this));
- myName = nodeConfig.getString("name");
-
- // Select the request scheduler
-
// Guesstimates. Hopefully well over the reality.
localChkFetchBytesSentAverage = new
TimeDecayingRunningAverage(500, 180000, 0.0, Long.MAX_VALUE);
localSskFetchBytesSentAverage = new
TimeDecayingRunningAverage(500, 180000, 0.0, Long.MAX_VALUE);
@@ -1646,35 +1639,36 @@
remoteChkInsertBytesReceivedAverage = new
TimeDecayingRunningAverage(32768+1024+500, 180000, 0.0, Long.MAX_VALUE);
remoteSskInsertBytesReceivedAverage = new
TimeDecayingRunningAverage(1024+1024+500, 180000, 0.0, Long.MAX_VALUE);
- // FIXME make all the below arbitrary constants configurable!
+ SubConfig schedulerConfig = new SubConfig("node.scheduler",
config);
archiveManager = new ArchiveManager(MAX_ARCHIVE_HANDLERS,
MAX_CACHED_ARCHIVE_DATA, MAX_ARCHIVE_SIZE, MAX_ARCHIVED_FILE_SIZE,
MAX_CACHED_ELEMENTS, random, tempFilenameGenerator);
chkRequestThrottle = new MyRequestThrottle(throttleWindow,
5000, "CHK Request");
chkRequestStarter = new RequestStarter(this,
chkRequestThrottle, "CHK Request starter ("+portNumber+")",
requestOutputThrottle, requestInputThrottle, localChkFetchBytesSentAverage,
localChkFetchBytesReceivedAverage);
- chkFetchScheduler = new ClientRequestScheduler(false, false,
random, chkRequestStarter, this);
+ chkFetchScheduler = new ClientRequestScheduler(false, false,
random, chkRequestStarter, this, schedulerConfig, "CHKrequester");
chkRequestStarter.setScheduler(chkFetchScheduler);
chkRequestStarter.start();
//insertThrottle = new ChainedRequestThrottle(10000, 2.0F,
requestThrottle);
// FIXME reenable the above
chkInsertThrottle = new MyRequestThrottle(throttleWindow,
20000, "CHK Insert");
chkInsertStarter = new RequestStarter(this, chkInsertThrottle,
"CHK Insert starter ("+portNumber+")", requestOutputThrottle,
requestInputThrottle, localChkInsertBytesSentAverage,
localChkInsertBytesReceivedAverage);
- chkPutScheduler = new ClientRequestScheduler(true, false,
random, chkInsertStarter, this);
+ chkPutScheduler = new ClientRequestScheduler(true, false,
random, chkInsertStarter, this, schedulerConfig, "CHKinserter");
chkInsertStarter.setScheduler(chkPutScheduler);
chkInsertStarter.start();
sskRequestThrottle = new MyRequestThrottle(throttleWindow,
5000, "SSK Request");
sskRequestStarter = new RequestStarter(this,
sskRequestThrottle, "SSK Request starter ("+portNumber+")",
requestOutputThrottle, requestInputThrottle, localSskFetchBytesSentAverage,
localSskFetchBytesReceivedAverage);
- sskFetchScheduler = new ClientRequestScheduler(false, true,
random, sskRequestStarter, this);
+ sskFetchScheduler = new ClientRequestScheduler(false, true,
random, sskRequestStarter, this, schedulerConfig, "SSKrequester");
sskRequestStarter.setScheduler(sskFetchScheduler);
sskRequestStarter.start();
//insertThrottle = new ChainedRequestThrottle(10000, 2.0F,
requestThrottle);
// FIXME reenable the above
sskInsertThrottle = new MyRequestThrottle(throttleWindow,
20000, "SSK Insert");
sskInsertStarter = new RequestStarter(this, sskInsertThrottle,
"SSK Insert starter ("+portNumber+")", requestOutputThrottle,
requestInputThrottle, localSskInsertBytesSentAverage,
localSskFetchBytesReceivedAverage);
- sskPutScheduler = new ClientRequestScheduler(true, true,
random, sskInsertStarter, this);
+ sskPutScheduler = new ClientRequestScheduler(true, true,
random, sskInsertStarter, this, schedulerConfig, "SSKinserter");
sskInsertStarter.setScheduler(sskPutScheduler);
sskInsertStarter.start();
+ schedulerConfig.finishedInitialization();
nodeConfig.finishedInitialization();