Author: toad
Date: 2008-06-24 20:52:36 +0000 (Tue, 24 Jun 2008)
New Revision: 20661
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
Log:
Database updating on changes.
Activation.
Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-24 20:47:01 UTC (rev 20660)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-24 20:52:36 UTC (rev 20661)
@@ -58,7 +58,7 @@
private final Bucket returnBucket;
private boolean finished;
private long token;
- private final boolean persistent;
+ final boolean persistent;
public SplitFileFetcher(Metadata metadata, GetCompletionCallback rcb,
ClientRequester parent2,
FetchContext newCtx, LinkedList decompressors,
ClientMetadata clientMetadata,
@@ -178,10 +178,12 @@
* Bucket containing the fetched data.
* @throws FetchException If the fetch failed for some reason.
*/
- private Bucket finalStatus(ClientContext context) throws FetchException
{
+ private Bucket finalStatus(ObjectContainer container, ClientContext
context) throws FetchException {
long finalLength = 0;
for(int i=0;i<segments.length;i++) {
SplitFileFetcherSegment s = segments[i];
+ if(persistent)
+ container.activate(s, 1);
if(!s.isFinished()) throw new
IllegalStateException("Not all finished");
s.throwError();
// If still here, it succeeded
@@ -224,16 +226,21 @@
}
public void segmentFinished(SplitFileFetcherSegment segment,
ObjectContainer container, ClientContext context) {
+ if(persistent)
+ container.activate(this, 1);
boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Finished segment: "+segment);
boolean finish = false;
synchronized(this) {
boolean allDone = true;
- for(int i=0;i<segments.length;i++)
+ for(int i=0;i<segments.length;i++) {
+ if(persistent)
+ container.activate(segments[i], 1);
if(!segments[i].isFinished()) {
if(logMINOR) Logger.minor(this,
"Segment "+segments[i]+" is not finished");
allDone = false;
}
+ }
if(allDone) {
if(allSegmentsFinished) {
Logger.error(this, "Was already
finished! (segmentFinished("+segment+ ')', new Exception("debug"));
@@ -244,10 +251,13 @@
}
notifyAll();
}
+ if(persistent) container.set(this);
if(finish) finish(container, context);
}
private void finish(ObjectContainer container, ClientContext context) {
+ if(persistent)
+ container.activate(this, 1);
try {
synchronized(this) {
if(finished) {
@@ -256,8 +266,12 @@
}
finished = true;
}
- Bucket data = finalStatus(context);
+ Bucket data = finalStatus(container, context);
// Decompress
+ if(persistent) {
+ container.set(this);
+ container.activate(decompressors, 1);
+ }
while(!decompressors.isEmpty()) {
Compressor c = (Compressor)
decompressors.removeLast();
long maxLen =
Math.max(fetchContext.maxTempLength, fetchContext.maxOutputLength);
@@ -286,6 +300,8 @@
}
public void schedule(ObjectContainer container, ClientContext context) {
+ if(persistent)
+ container.activate(this, 1);
if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this,
"Scheduling "+this);
for(int i=0;i<segments.length;i++) {
segments[i].schedule(container, context);
@@ -293,6 +309,8 @@
}
public void cancel(ObjectContainer container, ClientContext context) {
+ if(persistent)
+ container.activate(this, 1);
for(int i=0;i<segments.length;i++)
segments[i].cancel(container, context);
}