Author: toad
Date: 2008-06-05 19:41:40 +0000 (Thu, 05 Jun 2008)
New Revision: 20227
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
branches/db4o/freenet/src/freenet/client/async/ClientRequester.java
branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
branches/db4o/freenet/src/freenet/node/RequestScheduler.java
branches/db4o/freenet/src/freenet/node/SendableGet.java
Log:
Pass ClientContext in some more places
Modified: branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
2008-06-05 19:31:19 UTC (rev 20226)
+++ branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
2008-06-05 19:41:40 UTC (rev 20227)
@@ -11,7 +11,7 @@
*/
public interface ClientGetState {
- public void schedule(ObjectContainer container);
+ public void schedule(ObjectContainer container, ClientContext context);
public void cancel(ObjectContainer container);
Modified: branches/db4o/freenet/src/freenet/client/async/ClientRequester.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequester.java
2008-06-05 19:31:19 UTC (rev 20226)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequester.java
2008-06-05 19:41:40 UTC (rev 20227)
@@ -21,18 +21,14 @@
// FIXME move the priority classes from RequestStarter here
protected short priorityClass;
protected boolean cancelled;
- public final ClientRequestScheduler chkScheduler;
- public final ClientRequestScheduler sskScheduler;
protected final RequestClient client;
public short getPriorityClass() {
return priorityClass;
}
- protected ClientRequester(short priorityClass, ClientRequestScheduler
chkScheduler, ClientRequestScheduler sskScheduler, RequestClient client) {
+ protected ClientRequester(short priorityClass, RequestClient client) {
this.priorityClass = priorityClass;
- this.chkScheduler = chkScheduler;
- this.sskScheduler = sskScheduler;
this.client = client;
}
@@ -127,10 +123,12 @@
return client;
}
- public void setPriorityClass(short newPriorityClass) {
+ public void setPriorityClass(short newPriorityClass, ClientContext ctx)
{
this.priorityClass = newPriorityClass;
- chkScheduler.reregisterAll(this);
- sskScheduler.reregisterAll(this);
+ ctx.chkFetchScheduler.reregisterAll(this);
+ ctx.chkInsertScheduler.reregisterAll(this);
+ ctx.sskFetchScheduler.reregisterAll(this);
+ ctx.sskInsertScheduler.reregisterAll(this);
}
public boolean persistent() {
Modified:
branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
2008-06-05 19:31:19 UTC (rev 20226)
+++ branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
2008-06-05 19:41:40 UTC (rev 20227)
@@ -218,7 +218,7 @@
}
}
- public void schedule(ObjectContainer container) throws InsertException {
+ public void schedule(ObjectContainer container, ClientContext context)
throws InsertException {
synchronized(this) {
if(finished) return;
}
@@ -229,16 +229,16 @@
cb.onSuccess(this, container);
finished = true;
} else {
- getScheduler().register(this);
+ getScheduler(context).register(this);
}
}
- private ClientRequestScheduler getScheduler() {
+ private ClientRequestScheduler getScheduler(ClientContext context) {
String uriType = uri.getKeyType();
if(uriType.equals("CHK"))
- return parent.chkScheduler;
+ return context.chkInsertScheduler;
else if(uriType.equals("SSK") || uriType.equals("KSK"))
- return parent.sskScheduler;
+ return context.sskInsertScheduler;
else throw new IllegalArgumentException();
}
Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-05 19:31:19 UTC (rev 20226)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-05 19:41:40 UTC (rev 20227)
@@ -283,10 +283,10 @@
}
}
- public void schedule(ObjectContainer container) {
+ public void schedule(ObjectContainer container, ClientContext context) {
if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this,
"Scheduling "+this);
for(int i=0;i<segments.length;i++) {
- segments[i].schedule(container);
+ segments[i].schedule(container, context);
}
}
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-06-05 19:31:19 UTC (rev 20226)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-06-05 19:41:40 UTC (rev 20227)
@@ -345,13 +345,13 @@
/** This is after any retries and therefore is either out-of-retries or
fatal
* @param container */
- public synchronized void onFatalFailure(FetchException e, int blockNo,
SplitFileFetcherSubSegment seg, ObjectContainer container) {
+ public synchronized void onFatalFailure(FetchException e, int blockNo,
SplitFileFetcherSubSegment seg, ObjectContainer container, ClientContext
context) {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Permanently failed block:
"+blockNo+" on "+this+" : "+e, e);
boolean allFailed;
// Since we can't keep the key, we need to unregister for it at
this point to avoid a memory leak
NodeCHK key = getBlockNodeKey(blockNo);
- if(key != null) seg.unregisterKey(key);
+ if(key != null) seg.unregisterKey(key, context);
synchronized(this) {
if(isFinishing()) return; // this failure is now
irrelevant, and cleanup will occur on the decoder thread
if(blockNo < dataKeys.length) {
@@ -388,6 +388,7 @@
/** A request has failed non-fatally, so the block may be retried
* @param container */
public void onNonFatalFailure(FetchException e, int blockNo,
SplitFileFetcherSubSegment seg, RequestScheduler sched, ObjectContainer
container) {
+ ClientContext context = sched.getContext();
int tries;
int maxTries = blockFetchContext.maxNonSplitfileRetries;
boolean failed = false;
@@ -430,22 +431,22 @@
}
}
if(failed) {
- onFatalFailure(e, blockNo, seg, container);
+ onFatalFailure(e, blockNo, seg, container, context);
if(logMINOR)
Logger.minor(this, "Not retrying block
"+blockNo+" on "+this+" : tries="+tries+"/"+maxTries);
return;
}
if(cooldown) {
// Register to the next sub-segment before removing
from the old one.
- sub.getScheduler().addPendingKey(key, sub);
- seg.unregisterKey(key.getNodeKey());
+ sub.getScheduler(context).addPendingKey(key, sub);
+ seg.unregisterKey(key.getNodeKey(), context);
} else {
// If we are here we are going to retry
// Unregister from the old sub-segment before
registering on the new.
- seg.unregisterKey(key.getNodeKey());
+ seg.unregisterKey(key.getNodeKey(), context);
if(logMINOR)
Logger.minor(this, "Retrying block "+blockNo+"
on "+this+" : tries="+tries+"/"+maxTries+" : "+sub);
- sub.add(blockNo, false, container);
+ sub.add(blockNo, false, container, context);
}
}
@@ -492,13 +493,13 @@
parentFetcher.segmentFinished(this, container);
}
- public void schedule(ObjectContainer container) {
+ public void schedule(ObjectContainer container, ClientContext context) {
try {
SplitFileFetcherSubSegment seg = getSubSegment(0);
for(int
i=0;i<dataRetries.length+checkRetries.length;i++)
- seg.add(i, true, container);
+ seg.add(i, true, container, context);
- seg.schedule(container);
+ seg.schedule(container, context);
synchronized(this) {
scheduled = true;
}
@@ -590,7 +591,7 @@
return checkCooldownTimes[blockNum - dataKeys.length];
}
- public void requeueAfterCooldown(Key key, long time, ObjectContainer
container) {
+ public void requeueAfterCooldown(Key key, long time, ObjectContainer
container, ClientContext context) {
Vector v = null;
boolean notFound = true;
synchronized(this) {
@@ -609,7 +610,7 @@
if(logMINOR)
Logger.minor(this, "Retrying after
cooldown on "+this+": data block "+i+" on "+this+" :
tries="+tries+"/"+maxTries+" : "+sub);
if(v == null) v = new Vector();
- sub.add(i, true, container);
+ sub.add(i, true, container, context);
if(!v.contains(sub)) v.add(sub);
notFound = false;
}
@@ -627,7 +628,7 @@
if(logMINOR)
Logger.minor(this, "Retrying after
cooldown on "+this+": check block "+i+" on "+this+" :
tries="+tries+"/"+maxTries+" : "+sub);
if(v == null) v = new Vector();
- sub.add(i+dataKeys.length, true, container);
+ sub.add(i+dataKeys.length, true, container,
context);
if(!v.contains(sub)) v.add(sub);
notFound = false;
}
@@ -638,7 +639,7 @@
}
if(v != null) {
for(int i=0;i<v.size();i++) {
- ((SplitFileFetcherSubSegment)
v.get(i)).schedule(container);
+ ((SplitFileFetcherSubSegment)
v.get(i)).schedule(container, context);
}
}
}
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-06-05 19:31:19 UTC (rev 20226)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-06-05 19:41:40 UTC (rev 20227)
@@ -329,7 +329,7 @@
return false;
}
- public void add(int blockNo, boolean dontSchedule, ObjectContainer
container) {
+ public void add(int blockNo, boolean dontSchedule, ObjectContainer
container, ClientContext context) {
boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Adding block "+blockNo+" to
"+this+" dontSchedule="+dontSchedule);
if(blockNo < 0) throw new IllegalArgumentException();
@@ -359,10 +359,10 @@
schedule = false;
}
}
- if(schedule) schedule(container);
+ if(schedule) schedule(container, context);
else if(!dontSchedule)
// Already scheduled, however this key may not be
registered.
-
getScheduler().addPendingKey(segment.getBlockKey(blockNo), this);
+
getScheduler(context).addPendingKey(segment.getBlockKey(blockNo), this);
}
public String toString() {
@@ -441,10 +441,10 @@
return segment.getCooldownWakeup(((Integer)token).intValue());
}
- public void requeueAfterCooldown(Key key, long time, ObjectContainer
container) {
+ public void requeueAfterCooldown(Key key, long time, ObjectContainer
container, ClientContext context) {
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Requeueing after cooldown "+key+"
for "+this);
- segment.requeueAfterCooldown(key, time, container);
+ segment.requeueAfterCooldown(key, time, container, context);
}
public long getCooldownWakeupByKey(Key key, ObjectContainer container) {
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2008-06-05 19:31:19 UTC (rev 20226)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2008-06-05 19:41:40 UTC (rev 20227)
@@ -477,7 +477,7 @@
blockInsertContext, this,
false, CHKBlock.DATA_LENGTH,
i + dataBlocks.length,
getCHKOnly, false, false,
parent.token);
- checkBlockInserters[i].schedule();
+ checkBlockInserters[i].schedule(container);
}
} catch (Throwable t) {
Logger.error(this, "Caught " + t + " while encoding " +
this, t);
Modified: branches/db4o/freenet/src/freenet/node/RequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/RequestScheduler.java
2008-06-05 19:31:19 UTC (rev 20226)
+++ branches/db4o/freenet/src/freenet/node/RequestScheduler.java
2008-06-05 19:41:40 UTC (rev 20227)
@@ -7,6 +7,7 @@
import freenet.client.FECQueue;
import freenet.client.async.ChosenRequest;
+import freenet.client.async.ClientContext;
import freenet.keys.ClientKey;
import freenet.keys.Key;
import freenet.support.PrioritizedSerialExecutor;
@@ -64,5 +65,7 @@
public void callSuccess(final SendableInsert put, final Object keyNum,
int prio, String name);
public FECQueue getFECQueue();
+
+ public ClientContext getContext();
}
Modified: branches/db4o/freenet/src/freenet/node/SendableGet.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/SendableGet.java 2008-06-05
19:31:19 UTC (rev 20226)
+++ branches/db4o/freenet/src/freenet/node/SendableGet.java 2008-06-05
19:41:40 UTC (rev 20227)
@@ -6,6 +6,7 @@
import com.db4o.ObjectContainer;
import freenet.client.FetchContext;
+import freenet.client.async.ClientContext;
import freenet.client.async.ClientRequestScheduler;
import freenet.client.async.ClientRequester;
import freenet.keys.ClientKey;
@@ -96,17 +97,17 @@
return true;
}
- public void schedule(ObjectContainer container) {
+ public void schedule(ObjectContainer container, ClientContext context) {
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Scheduling "+this);
- getScheduler().register(this);
+ getScheduler(context).register(this);
}
- public ClientRequestScheduler getScheduler() {
+ public ClientRequestScheduler getScheduler(ClientContext context) {
if(isSSK())
- return parent.sskScheduler;
+ return context.sskFetchScheduler;
else
- return parent.chkScheduler;
+ return context.chkFetchScheduler;
}
/**
@@ -130,14 +131,14 @@
/** Reset the cooldown times when the request is reregistered. */
public abstract void resetCooldownTimes(ObjectContainer container);
- public final void unregister(boolean staySubscribed) {
+ public final void unregister(boolean staySubscribed, ClientContext
context) {
if(!staySubscribed)
- getScheduler().removePendingKeys(this, false);
+ getScheduler(context).removePendingKeys(this, false);
super.unregister(staySubscribed);
}
- public final void unregisterKey(Key key) {
- getScheduler().removePendingKey(this, false, key);
+ public final void unregisterKey(Key key, ClientContext context) {
+ getScheduler(context).removePendingKey(this, false, key);
}
public void internalError(final Object keyNum, final Throwable t, final
RequestScheduler sched, ObjectContainer container) {
@@ -149,6 +150,6 @@
* Only requeue if our requeue time is less than or equal to the given
time.
* @param key
*/
- public abstract void requeueAfterCooldown(Key key, long time,
ObjectContainer container);
+ public abstract void requeueAfterCooldown(Key key, long time,
ObjectContainer container, ClientContext context);
}