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


Reply via email to