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