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


Reply via email to