Author: toad
Date: 2008-07-17 21:31:59 +0000 (Thu, 17 Jul 2008)
New Revision: 21186
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
Deactivation, some activation
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-07-17 21:29:31 UTC (rev 21185)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-07-17 21:31:59 UTC (rev 21186)
@@ -325,7 +325,7 @@
try {
maybeAddToBinaryBlob(data, i,
false, container, context);
} catch (FetchException e) {
- fail(e, container, context);
+ fail(e, container, context,
false);
return;
}
}
@@ -372,6 +372,11 @@
codec.addToQueue(new FECJob(codec, context.fecQueue,
dataBuckets, checkBuckets, 32768,
context.getBucketFactory(parentFetcher.parent.persistent()), this, false,
parentFetcher.parent.getPriorityClass(), parentFetcher.parent.persistent()),
context.fecQueue, container);
+ if(persistent) {
+ container.deactivate(parentFetcher, 1);
+ container.deactivate(parentFetcher.parent, 1);
+ container.deactivate(context, 1);
+ }
}
public void onEncodedSegment(ObjectContainer container, ClientContext
context, FECJob job, Bucket[] dataBuckets2, Bucket[] checkBuckets2,
SplitfileBlock[] dataBlockStatus, SplitfileBlock[] checkBlockStatus) {
@@ -409,7 +414,7 @@
try {
maybeAddToBinaryBlob(data, i, true,
container, context);
} catch (FetchException e) {
- fail(e, container, context);
+ fail(e, container, context, false);
return;
}
if(checkRetries[i] > 0)
@@ -425,11 +430,15 @@
}
if(persistent) {
container.set(this);
- container.activate(parentFetcher, 1);
}
// Defer the completion until we have generated healing blocks
if we are collecting binary blobs.
- if(isCollectingBinaryBlob())
+ if(isCollectingBinaryBlob()) {
+ if(persistent)
+ container.activate(parentFetcher, 1);
parentFetcher.segmentFinished(SplitFileFetcherSegment.this, container, context);
+ if(persistent)
+ container.deactivate(parentFetcher, 1);
+ }
}
boolean isCollectingBinaryBlob() {
@@ -505,7 +514,7 @@
if(persistent)
container.set(this);
if(allFailed)
- fail(new FetchException(FetchException.SPLITFILE_ERROR,
errors), container, context);
+ fail(new FetchException(FetchException.SPLITFILE_ERROR,
errors), container, context, false);
else if(seg != null)
seg.possiblyRemoveFromParent(container);
}
@@ -606,7 +615,7 @@
return sub;
}
- void fail(FetchException e, ObjectContainer container, ClientContext
context) {
+ void fail(FetchException e, ObjectContainer container, ClientContext
context, boolean dontDeactivateParent) {
synchronized(this) {
if(finished) return;
finished = true;
@@ -643,6 +652,8 @@
container.activate(parentFetcher, 1);
}
parentFetcher.segmentFinished(this, container, context);
+ if(!dontDeactivateParent)
+ container.deactivate(parentFetcher, 1);
}
public void schedule(ObjectContainer container, ClientContext context,
boolean regmeOnly) {
@@ -659,6 +670,8 @@
seg.add(i, true, container, context, false);
seg.schedule(container, context, true, regmeOnly);
+ if(persistent)
+ container.deactivate(seg, 1);
synchronized(this) {
scheduled = true;
}
@@ -668,12 +681,12 @@
Logger.minor(this, "scheduling "+seg+" :
"+seg.blockNums);
} catch (Throwable t) {
Logger.error(this, "Caught "+t+" scheduling "+this, t);
- fail(new FetchException(FetchException.INTERNAL_ERROR,
t), container, context);
+ fail(new FetchException(FetchException.INTERNAL_ERROR,
t), container, context, true);
}
}
public void cancel(ObjectContainer container, ClientContext context) {
- fail(new FetchException(FetchException.CANCELLED), container,
context);
+ fail(new FetchException(FetchException.CANCELLED), container,
context, true);
}
public void onBlockSetFinished(ClientGetState state) {
@@ -832,15 +845,23 @@
SplitFileFetcherSubSegment sub =
(SplitFileFetcherSubSegment) v.get(i);
RandomGrabArray rga = sub.getParentGrabArray();
if(sub.getParentGrabArray() == null) {
+ if(persistent)
+ container.activate(sub, 1);
sub.schedule(container, context, false,
false);
+ if(persistent)
+ container.deactivate(sub, 1);
} else {
// if(logMINOR) {
- container.activate(rga, 1);
+ if(persistent)
+ container.activate(rga,
1);
if(!rga.contains(sub,
container)) {
Logger.error(this,
"Sub-segment has RGA but isn't registered to it!!: "+sub+" for "+rga);
sub.schedule(container,
context, false, false);
+ if(persistent)
+
container.deactivate(sub, 1);
}
- container.deactivate(rga, 1);
+ if(persistent)
+
container.deactivate(rga, 1);
// }
}
}
@@ -923,7 +944,7 @@
}
if(persistent)
container.activate(this, 1);
- this.fail(new FetchException(FetchException.INTERNAL_ERROR,
"FEC failure: "+t, t), container, context);
+ this.fail(new FetchException(FetchException.INTERNAL_ERROR,
"FEC failure: "+t, t), container, context, false);
}
public boolean haveBlock(int blockNo, ObjectContainer container) {
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-07-17 21:29:31 UTC (rev 21185)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-07-17 21:31:59 UTC (rev 21186)
@@ -281,12 +281,17 @@
}
segment.errors.inc(e.getMode());
if(e.isFatal() && token == null) {
- segment.fail(e, container, context);
+ segment.fail(e, container, context, false);
} else if(e.isFatal() || forceFatal) {
segment.onFatalFailure(e, ((Integer)token).intValue(),
this, container, context);
} else {
segment.onNonFatalFailure(e,
((Integer)token).intValue(), this, container, context);
}
+ if(persistent) {
+ container.deactivate(segment, 1);
+ container.deactivate(parent, 1);
+ container.deactivate(segment.errors, 1);
+ }
}
public void onSuccess(ClientKeyBlock block, boolean fromStore, Object
token, ObjectContainer container, ClientContext context) {
@@ -321,6 +326,10 @@
} else {
onFailure(new
FetchException(FetchException.INVALID_METADATA, "Metadata where expected
data"), token, container, context);
}
+ if(persistent) {
+ container.deactivate(segment, 1);
+ container.deactivate(blockNums, 1);
+ }
}
protected void onSuccess(Bucket data, boolean fromStore, Integer token,
int blockNo, ClientKeyBlock block, ObjectContainer container, ClientContext
context) {