Author: toad
Date: 2008-06-26 15:26:23 +0000 (Thu, 26 Jun 2008)
New Revision: 20748

Modified:
   branches/db4o/freenet/src/freenet/client/async/BackgroundBlockEncoder.java
   branches/db4o/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
   branches/db4o/freenet/src/freenet/client/async/ChosenRequest.java
   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/client/async/OfferedKeysList.java
   branches/db4o/freenet/src/freenet/client/async/PersistentChosenRequest.java
   branches/db4o/freenet/src/freenet/client/async/RegisterMe.java
   branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
   
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
   branches/db4o/freenet/src/freenet/node/RequestStarter.java
   branches/db4o/freenet/src/freenet/node/SendableRequest.java
   branches/db4o/freenet/src/freenet/node/SimpleSendableInsert.java
Log:
getPriorityClass(ObjectContainer) since many types look it up on the parent.

Modified: 
branches/db4o/freenet/src/freenet/client/async/BackgroundBlockEncoder.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/BackgroundBlockEncoder.java  
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/client/async/BackgroundBlockEncoder.java  
2008-06-26 15:26:23 UTC (rev 20748)
@@ -78,7 +78,7 @@
        }

        private void queuePersistent(SingleBlockInserter sbi, ObjectContainer 
container, ClientContext context) {
-               BackgroundBlockEncoderTag tag = new 
BackgroundBlockEncoderTag(sbi, context);
+               BackgroundBlockEncoderTag tag = new 
BackgroundBlockEncoderTag(sbi, sbi.getPriorityClass(container), context);
                container.set(tag);
        }

@@ -150,10 +150,10 @@
        /** For implementing priority ordering */
        final short priority;

-       BackgroundBlockEncoderTag(SingleBlockInserter inserter, ClientContext 
context) {
+       BackgroundBlockEncoderTag(SingleBlockInserter inserter, short prio, 
ClientContext context) {
                this.inserter = inserter;
                this.nodeDBHandle = context.nodeDBHandle;
                this.addedTime = System.currentTimeMillis();
-               this.priority = inserter.getPriorityClass();
+               this.priority = prio;
        }
 }

Modified: 
branches/db4o/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/BaseSingleFileFetcher.java   
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/client/async/BaseSingleFileFetcher.java   
2008-06-26 15:26:23 UTC (rev 20748)
@@ -104,8 +104,10 @@
                return parent;
        }

-       public short getPriorityClass() {
-               return parent.getPriorityClass();
+       public short getPriorityClass(ObjectContainer container) {
+               if(persistent) container.activate(parent, 1); // Not much point 
deactivating it
+               short retval = parent.getPriorityClass();
+               return retval;
        }

        public boolean ignoreStore() {

Modified: branches/db4o/freenet/src/freenet/client/async/ChosenRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ChosenRequest.java   
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/client/async/ChosenRequest.java   
2008-06-26 15:26:23 UTC (rev 20748)
@@ -24,12 +24,15 @@
        public final Key key;
        /** The client-layer key to be fetched, null if not a SendableGet */
        public final ClientKey ckey;
+       /** Priority when we selected it */
+       public short prio;

-       ChosenRequest(SendableRequest req, Object tok, Key key, ClientKey ckey) 
{
+       ChosenRequest(SendableRequest req, Object tok, Key key, ClientKey ckey, 
short prio) {
                request = req;
                token = tok;
                this.key = key;
                this.ckey = ckey;
+               this.prio = prio;
        }

        public boolean send(NodeClientCore core, RequestScheduler sched) {

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-06-26 15:26:23 UTC (rev 20748)
@@ -186,7 +186,7 @@
                                                registerCheckStore(getter, 
true, keyTokens, keys, reg);
                                        }

-                               }, getter.getPriorityClass(), "Checking 
datastore");
+                               }, getter.getPriorityClass(selectorContainer), 
"Checking datastore");
                        } else if(persistent) {
                                jobRunner.queue(new DBJob() {

@@ -205,7 +205,7 @@
                                                                
registerCheckStore(getter, true, keyTokens, keys, reg);
                                                        }

-                                               }, getter.getPriorityClass(), 
"Checking datastore");
+                                               }, 
getter.getPriorityClass(container), "Checking datastore");
                                        }

                                }, NativeThread.NORM_PRIORITY, false);
@@ -223,7 +223,7 @@
                                                registerCheckStore(getter, 
false, keyTokens, keys, null);
                                        }

-                               }, getter.getPriorityClass(), "Checking 
datastore");
+                               }, getter.getPriorityClass(null), "Checking 
datastore");
                        }
                } else {
                        if(persistent) {
@@ -325,7 +325,7 @@
                                // Even with working thread priorities, we 
still get very high latency accessing
                                // the datastore when background threads are 
doing it in parallel.
                                // So yield() here, unless priority is very 
high.
-                               if(getter.getPriorityClass() > 
RequestStarter.IMMEDIATE_SPLITFILE_PRIORITY_CLASS)
+                               if(getter.getPriorityClass(selectorContainer) > 
RequestStarter.IMMEDIATE_SPLITFILE_PRIORITY_CLASS)
                                        Thread.yield();
                        } else {
                                anyValid = true;
@@ -405,7 +405,7 @@
                        fuzz = 0;       
                if(req == null)
                        return schedCore.removeFirst(fuzz, random, offeredKeys, 
starter, schedTransient, true, Short.MAX_VALUE, Integer.MAX_VALUE, 
clientContext, null);
-               short prio = req.request.getPriorityClass();
+               short prio = req.prio;
                int retryCount = req.request.getRetryCount();
                return schedCore.removeFirst(fuzz, random, offeredKeys, 
starter, schedTransient, true, prio, retryCount, clientContext, null);
        }
@@ -606,7 +606,7 @@
                        // FIXME what priority???
                        priority = 
RequestStarter.IMMEDIATE_SPLITFILE_PRIORITY_CLASS;
                }
-               priority = schedTransient.getKeyPrio(key, priority);
+               priority = schedTransient.getKeyPrio(key, priority, null);
                if(priority < Short.MAX_VALUE) {
                        offeredKeys[priority].queueKey(key);
                        starter.wakeUp();
@@ -617,7 +617,7 @@
                jobRunner.queue(new DBJob() {

                        public void run(ObjectContainer container, 
ClientContext context) {
-                               short priority = schedCore.getKeyPrio(key, 
oldPrio);
+                               short priority = schedCore.getKeyPrio(key, 
oldPrio, container);
                                if(priority >= oldPrio) return; // already on 
list at >= priority
                                offeredKeys[priority].queueKey(key);
                                starter.wakeUp();

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-06-26 15:11:46 UTC (rev 20747)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-06-26 15:26:23 UTC (rev 20748)
@@ -191,18 +191,18 @@
                }
        }

-       public short getKeyPrio(Key key, short priority) {
+       public short getKeyPrio(Key key, short priority, ObjectContainer 
container) {
                synchronized(pendingKeys) {
                        Object o = pendingKeys.get(key);
                        if(o == null) {
                                // Blah
                        } else if(o instanceof SendableGet) {
-                               short p = ((SendableGet)o).getPriorityClass();
+                               short p = 
((SendableGet)o).getPriorityClass(container);
                                if(p < priority) priority = p;
                        } else { // if(o instanceof SendableGet[]) {
                                SendableGet[] gets = (SendableGet[]) o;
                                for(int i=0;i<gets.length;i++) {
-                                       short p = gets[i].getPriorityClass();
+                                       short p = 
gets[i].getPriorityClass(container);
                                        if(p < priority) priority = p;
                                }
                        }
@@ -234,20 +234,21 @@
        void innerRegister(SendableRequest req, RandomSource random, 
ObjectContainer container) {
                if(req.persistent() != persistent())
                        throw new IllegalArgumentException("innerRegister for 
persistence="+req.persistent()+" but our persistence is "+persistent());
-               if(req.getPriorityClass() == 0) {
+               if(req.getPriorityClass(container) == 0) {
                        Logger.normal(this, "Something wierd...");
-                       Logger.normal(this, "Priority "+req.getPriorityClass());
+                       Logger.normal(this, "Priority 
"+req.getPriorityClass(container));
                }
-               if(logMINOR) Logger.minor(this, "Still registering "+req+" at 
prio "+req.getPriorityClass()+" retry "+req.getRetryCount()+" for 
"+req.getClientRequest());
                int retryCount = req.getRetryCount();
-               addToGrabArray(req.getPriorityClass(), retryCount, 
fixRetryCount(retryCount), req.getClient(), req.getClientRequest(), req, 
random, container);
+               short prio = req.getPriorityClass(container);
+               if(logMINOR) Logger.minor(this, "Still registering "+req+" at 
prio "+prio+" retry "+retryCount+" for "+req.getClientRequest());
+               addToGrabArray(prio, retryCount, fixRetryCount(retryCount), 
req.getClient(), req.getClientRequest(), req, random, container);
                Set v = (Set) 
allRequestsByClientRequest.get(req.getClientRequest());
                if(v == null) {
                        v = makeSetForAllRequestsByClientRequest(container);
                        allRequestsByClientRequest.put(req.getClientRequest(), 
v);
                }
                v.add(req);
-               if(logMINOR) Logger.minor(this, "Registered "+req+" on 
prioclass="+req.getPriorityClass()+", retrycount="+req.getRetryCount()+" 
v.size()="+v.size());
+               if(logMINOR) Logger.minor(this, "Registered "+req+" on 
prioclass="+prio+", retrycount="+retryCount+" v.size()="+v.size());
        }

        protected abstract Set 
makeSetForAllRequestsByClientRequest(ObjectContainer container);

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-26 15:11:46 UTC (rev 20747)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-26 15:26:23 UTC (rev 20748)
@@ -258,12 +258,12 @@
                                container.activate(key, 5);
                                container.activate(ckey, 5);
                                container.activate(req.getClientRequest(), 1);
-                               ret = new PersistentChosenRequest(this, req, 
token, key, ckey);
+                               ret = new PersistentChosenRequest(this, req, 
token, key, ckey, req.getPriorityClass(container));
                                container.set(ret);
                                if(logMINOR)
                                        Logger.minor(this, "Storing "+ret);
                        } else {
-                               ret = new ChosenRequest(req, token, key, ckey);
+                               ret = new ChosenRequest(req, token, key, ckey, 
req.getPriorityClass(container));
                        }
                        if(key != null) {
                                if(logMINOR)
@@ -373,10 +373,10 @@
                                Logger.error(this, 
"Request.persistent()="+req.persistent()+" but is in the queue for 
persistent="+trackerParent.persistent()+" for "+req);
                                // FIXME fix it
                        }
-                       if(req.getPriorityClass() != choosenPriorityClass) {
+                       if(req.getPriorityClass(container) != 
choosenPriorityClass) {
                                // Reinsert it : shouldn't happen if we are 
calling reregisterAll,
                                // maybe we should ask people to report that 
error if seen
-                               Logger.normal(this, "In wrong priority class: 
"+req+" (req.prio="+req.getPriorityClass()+" but chosen="+choosenPriorityClass+ 
')');
+                               Logger.normal(this, "In wrong priority class: 
"+req+" (req.prio="+req.getPriorityClass(container)+" but 
chosen="+choosenPriorityClass+ ')');
                                // Remove it.
                                SectoredRandomGrabArrayWithObject clientGrabber 
= (SectoredRandomGrabArrayWithObject) chosenTracker.getGrabber(req.getClient());
                                if(clientGrabber != null) {
@@ -403,7 +403,7 @@
                                        altReq = (BaseSendableGet) 
recent.remove(recent.size()-1);
                                }
                        }
-                       if(altReq != null && altReq.getPriorityClass() <= 
choosenPriorityClass && 
+                       if(altReq != null && altReq.getPriorityClass(container) 
<= choosenPriorityClass && 
                                        fixRetryCount(altReq.getRetryCount()) 
<= chosenTracker.getNumber()) {
                                // Use the recent one instead
                                if(logMINOR)
@@ -422,7 +422,7 @@
                        }
                        // Now we have chosen a request.
                        if(logMINOR) Logger.debug(this, "removeFirst() 
returning "+req+" ("+chosenTracker.getNumber()+", prio "+
-                                       req.getPriorityClass()+", retries 
"+req.getRetryCount()+", client "+req.getClient()+", client-req 
"+req.getClientRequest()+ ')');
+                                       req.getPriorityClass(container)+", 
retries "+req.getRetryCount()+", client "+req.getClient()+", client-req 
"+req.getClientRequest()+ ')');
                        ClientRequester cr = req.getClientRequest();
                        if(req.canRemove(container)) {
                                if(req.persistent())
@@ -543,7 +543,7 @@
                if(!databaseExecutor.onThread()) {
                        throw new IllegalStateException("Not on database 
thread!");
                }
-               RegisterMe reg = new RegisterMe(req, this);
+               RegisterMe reg = new RegisterMe(req, 
req.getPriorityClass(container), this);
                container.set(reg);
        }


Modified: branches/db4o/freenet/src/freenet/client/async/OfferedKeysList.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/OfferedKeysList.java 
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/client/async/OfferedKeysList.java 
2008-06-26 15:26:23 UTC (rev 20748)
@@ -131,7 +131,7 @@
                return null;
        }

-       public short getPriorityClass() {
+       public short getPriorityClass(ObjectContainer container) {
                return priorityClass;
        }


Modified: 
branches/db4o/freenet/src/freenet/client/async/PersistentChosenRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/PersistentChosenRequest.java 
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/client/async/PersistentChosenRequest.java 
2008-06-26 15:26:23 UTC (rev 20748)
@@ -22,8 +22,8 @@

        ClientRequestSchedulerCore core;

-       PersistentChosenRequest(ClientRequestSchedulerCore core, 
SendableRequest req, Object tok, Key key, ClientKey ckey) {
-               super(req, tok, key, ckey);
+       PersistentChosenRequest(ClientRequestSchedulerCore core, 
SendableRequest req, Object tok, Key key, ClientKey ckey, short prio) {
+               super(req, tok, key, ckey, prio);
                this.core = core;
        }
 }

Modified: branches/db4o/freenet/src/freenet/client/async/RegisterMe.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/RegisterMe.java      
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/client/async/RegisterMe.java      
2008-06-26 15:26:23 UTC (rev 20748)
@@ -9,10 +9,10 @@
        final ClientRequestSchedulerCore core;
        final RegisterMeSortKey key;

-       RegisterMe(SendableRequest getter, ClientRequestSchedulerCore core) {
+       RegisterMe(SendableRequest getter, short prio, 
ClientRequestSchedulerCore core) {
                this.getter = getter;
                this.core = core;
-               this.key = new RegisterMeSortKey(getter.getPriorityClass());
+               this.key = new RegisterMeSortKey(prio);
        }

        public void objectOnActivate(ObjectContainer container) {

Modified: 
branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-06-26 15:26:23 UTC (rev 20748)
@@ -144,8 +144,9 @@
                return true;
        }

-       public short getPriorityClass() {
-               return parent.getPriorityClass();
+       public short getPriorityClass(ObjectContainer container) {
+               if(persistent) container.activate(parent, 1);
+               return parent.getPriorityClass(); // Not much point deactivating
        }

        public int getRetryCount() {

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java  
    2008-06-26 15:11:46 UTC (rev 20747)
+++ 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java  
    2008-06-26 15:26:23 UTC (rev 20748)
@@ -342,7 +342,8 @@
                return parent;
        }

-       public short getPriorityClass() {
+       public short getPriorityClass(ObjectContainer container) {
+               if(parent != null) container.activate(parent, 1);
                return parent.priorityClass;
        }


Modified: branches/db4o/freenet/src/freenet/node/RequestStarter.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/RequestStarter.java  2008-06-26 
15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/node/RequestStarter.java  2008-06-26 
15:26:23 UTC (rev 20748)
@@ -124,7 +124,7 @@
                                req = getRequest(logMINOR);
                        }
                        if(req != null) {
-                               if(logMINOR) Logger.minor(this, "Running 
"+req+" priority "+req.request.getPriorityClass());
+                               if(logMINOR) Logger.minor(this, "Running 
"+req+" priority "+req.prio);
                                // Wait
                                long delay = throttle.getDelay();
                                if(logMINOR) Logger.minor(this, 
"Delay="+delay+" from "+throttle);
@@ -224,7 +224,7 @@
        }

        private boolean startRequest(ChosenRequest req, boolean logMINOR) {
-               if(logMINOR) Logger.minor(this, "Running request "+req+" 
priority "+req.request.getPriorityClass());
+               if(logMINOR) Logger.minor(this, "Running request "+req+" 
priority "+req.prio);
                core.getExecutor().execute(new SenderThread(req, req.key), 
"RequestStarter$SenderThread for "+req);
                return true;
        }

Modified: branches/db4o/freenet/src/freenet/node/SendableRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/SendableRequest.java 2008-06-26 
15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/node/SendableRequest.java 2008-06-26 
15:26:23 UTC (rev 20748)
@@ -27,7 +27,7 @@
        protected final boolean persistent;

        /** Get the priority class of the request. */
-       public abstract short getPriorityClass();
+       public abstract short getPriorityClass(ObjectContainer container);

        public abstract int getRetryCount();


Modified: branches/db4o/freenet/src/freenet/node/SimpleSendableInsert.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/SimpleSendableInsert.java    
2008-06-26 15:11:46 UTC (rev 20747)
+++ branches/db4o/freenet/src/freenet/node/SimpleSendableInsert.java    
2008-06-26 15:26:23 UTC (rev 20748)
@@ -61,7 +61,7 @@
                        Logger.minor(this, "Failed insert of "+block+": "+e);
        }

-       public short getPriorityClass() {
+       public short getPriorityClass(ObjectContainer container) {
                return prioClass;
        }



Reply via email to