Author: toad
Date: 2008-06-28 14:48:55 +0000 (Sat, 28 Jun 2008)
New Revision: 20844
Modified:
branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
Log:
Activation mostly related to container unpacking
Modified: branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
2008-06-28 14:48:13 UTC (rev 20843)
+++ branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
2008-06-28 14:48:55 UTC (rev 20844)
@@ -89,4 +89,6 @@
*/
public abstract void extractPersistentOffThread(Bucket bucket,
ArchiveContext actx, String element, ArchiveExtractCallback callback,
ObjectContainer container, ClientContext context);
+ public abstract void activateForExecution(ObjectContainer container);
+
}
\ No newline at end of file
Modified: branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
2008-06-28 14:48:13 UTC (rev 20843)
+++ branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
2008-06-28 14:48:55 UTC (rev 20844)
@@ -135,6 +135,7 @@
if(logMINOR)
Logger.minor(this, "Calling callback for "+tag.data+" for "+tag.handler.key+"
element "+tag.element+" for "+tag.callback);
container.delete(tag);
+
container.activate(tag.callback, 1);
if(proxyCallback.data
== null)
tag.callback.notInArchive(container, context);
else
@@ -149,6 +150,7 @@
public void run(ObjectContainer
container, ClientContext context) {
container.delete(tag);
+
container.activate(tag.callback, 1);
tag.callback.onFailed(e, container, context);
}
@@ -160,6 +162,7 @@
public void run(ObjectContainer
container, ClientContext context) {
container.delete(tag);
+
container.activate(tag.callback, 1);
tag.callback.onFailed(e, container, context);
}
@@ -180,6 +183,7 @@
});
while(set.hasNext()) {
ArchiveExtractTag tag = (ArchiveExtractTag) set.next();
+ tag.activateForExecution(container);
runPersistentOffThread(tag, context,
context.archiveManager, context.persistentBucketFactory);
}
}
@@ -207,6 +211,11 @@
}
}
+
+ public void activateForExecution(ObjectContainer container) {
+ container.activate(this, 1);
+ container.activate(key, 5);
+ }
}
@@ -227,5 +236,13 @@
this.callback = callback;
this.nodeDBHandle = nodeDBHandle;
}
+
+ public void activateForExecution(ObjectContainer container) {
+ container.activate(this, 1);
+ container.activate(data, 5);
+ handler.activateForExecution(container);
+ container.activate(actx, 5);
+ container.activate(callback, 1);
+ }
}
\ No newline at end of file
Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
2008-06-28 14:48:13 UTC (rev 20843)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
2008-06-28 14:48:55 UTC (rev 20844)
@@ -202,6 +202,8 @@
onFailure(new
FetchException(FetchException.BUCKET_ERROR, e), false, container, context);
return;
} catch (CompressionOutputSizeException e) {
+ if(logMINOR)
+ Logger.minor(this, "Too big:
limit="+ctx.maxOutputLength+" temp="+ctx.maxTempLength);
onFailure(new
FetchException(FetchException.TOO_BIG, e.estimatedSize, (rcb == parent),
result.getMimeType()), false, container, context);
return;
}
@@ -250,8 +252,21 @@
* @throws ArchiveRestartException
*/
private synchronized void handleMetadata(final ObjectContainer
container, final ClientContext context) throws FetchException,
MetadataParseException, ArchiveFailureException, ArchiveRestartException {
- if(persistent)
+ if(persistent) {
container.activate(this, 2);
+ // ,1's are probably redundant
+ container.activate(metadata, 100);
+ container.activate(metaStrings, Integer.MAX_VALUE);
+ container.activate(thisKey, 5);
+ container.activate(ctx, 2); // for event producer and
allowed mime types
+ if(ah != null)
+ ah.activateForExecution(container);
+ container.activate(parent, 1);
+ container.activate(actx, 5);
+ container.activate(clientMetadata, 5);
+ container.activate(rcb, 1);
+ container.activate(returnBucket, 5);
+ }
while(true) {
if(metadata.isSimpleManifest()) {
if(logMINOR) Logger.minor(this, "Is simple
manifest");
@@ -302,8 +317,11 @@
}
if(persistent) container.set(this);
} else {
+ final boolean persistent =
this.persistent;
fetchArchive(false, archiveMetadata,
ArchiveManager.METADATA_NAME, new ArchiveExtractCallback() {
public void gotBucket(Bucket
data, ObjectContainer container, ClientContext context) {
+ if(persistent)
+
container.activate(SingleFileFetcher.this, 1);
try {
metadata =
Metadata.construct(data);
wrapHandleMetadata(true, container, context);
@@ -318,12 +336,18 @@
}
}
public void
notInArchive(ObjectContainer container, ClientContext context) {
+ if(persistent)
+
container.activate(SingleFileFetcher.this, 1);
onFailure(new
FetchException(FetchException.INTERNAL_ERROR, "No metadata in container! Cannot
happen as ArchiveManager should synthesise some!"), false, container, context);
}
public void
onFailed(ArchiveRestartException e, ObjectContainer container, ClientContext
context) {
+ if(persistent)
+
container.activate(SingleFileFetcher.this, 1);
SingleFileFetcher.this.onFailure(new FetchException(e), false, container,
context);
}
public void
onFailed(ArchiveFailureException e, ObjectContainer container, ClientContext
context) {
+ if(persistent)
+
container.activate(SingleFileFetcher.this, 1);
SingleFileFetcher.this.onFailure(new FetchException(e), false, container,
context);
}
}, container, context); // will result
in this function being called again
@@ -371,8 +395,11 @@
// Metadata cannot contain pointers to
files which don't exist.
// We enforce this in ArchiveHandler.
// Therefore, the archive needs to be
fetched.
+ final boolean persistent =
this.persistent;
fetchArchive(true, archiveMetadata,
filename, new ArchiveExtractCallback() {
public void gotBucket(Bucket
data, ObjectContainer container, ClientContext context) {
+ if(persistent)
+
container.activate(SingleFileFetcher.this, 1);
if(logMINOR)
Logger.minor(this, "Returning data");
Bucket out;
try {
@@ -392,12 +419,18 @@
onSuccess(new
FetchResult(clientMetadata, out), container, context);
}
public void
notInArchive(ObjectContainer container, ClientContext context) {
+ if(persistent)
+
container.activate(SingleFileFetcher.this, 1);
onFailure(new
FetchException(FetchException.NOT_IN_ARCHIVE), false, container, context);
}
public void
onFailed(ArchiveRestartException e, ObjectContainer container, ClientContext
context) {
+ if(persistent)
+
container.activate(SingleFileFetcher.this, 1);
SingleFileFetcher.this.onFailure(new FetchException(e), false, container,
context);
}
public void
onFailed(ArchiveFailureException e, ObjectContainer container, ClientContext
context) {
+ if(persistent)
+
container.activate(SingleFileFetcher.this, 1);
SingleFileFetcher.this.onFailure(new FetchException(e), false, container,
context);
}
}, container, context);
@@ -658,7 +691,7 @@
// remove the tag, and call the callback.
if(persistent) {
container.activate(SingleFileFetcher.this, 1);
- container.activate(ah, 1);
+ ah.activateForExecution(container);
}
ah.extractPersistentOffThread(result.asBucket(), actx, element, callback,
container, context);
}
@@ -667,7 +700,7 @@
private void innerSuccess(FetchResult result, ObjectContainer
container, ClientContext context) {
if(persistent) {
container.activate(SingleFileFetcher.this, 1);
- container.activate(ah, 1);
+ ah.activateForExecution(container);
}
try {
ah.extractToCache(result.asBucket(), actx,
element, callback, context.archiveManager, container, context);