Author: toad
Date: 2008-06-27 23:05:08 +0000 (Fri, 27 Jun 2008)
New Revision: 20837

Modified:
   branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
Log:
Activation/deactivation for SimpleManifestPutter

Modified: 
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2008-06-27 22:36:00 UTC (rev 20836)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2008-06-27 23:05:08 UTC (rev 20837)
@@ -36,6 +36,7 @@
                
                protected PutHandler(final SimpleManifestPutter smp, String 
name, Bucket data, ClientMetadata cm, boolean getCHKOnly) {
                        super(smp.priorityClass, smp.client);
+                       this.persistent = 
SimpleManifestPutter.this.persistent();
                        this.cm = cm;
                        this.data = data;
                        InsertBlock block = 
@@ -47,6 +48,7 @@
 
                protected PutHandler(final SimpleManifestPutter smp, String 
name, FreenetURI target, ClientMetadata cm) {
                        super(smp.getPriorityClass(), smp.client);
+                       this.persistent = 
SimpleManifestPutter.this.persistent();
                        this.cm = cm;
                        this.data = null;
                        Metadata m = new Metadata(Metadata.SIMPLE_REDIRECT, 
target, cm);
@@ -56,6 +58,7 @@
                
                protected PutHandler(final SimpleManifestPutter smp, String 
name, String targetInZip, ClientMetadata cm, Bucket data) {
                        super(smp.getPriorityClass(), smp.client);
+                       this.persistent = 
SimpleManifestPutter.this.persistent();
                        this.cm = cm;
                        this.data = data;
                        this.targetInZip = targetInZip;
@@ -69,11 +72,16 @@
                private Metadata metadata;
                private String targetInZip;
                private final Bucket data;
+               private final boolean persistent;
                
                public void start(ObjectContainer container, ClientContext 
context) throws InsertException {
                        if((origSFI == null) && (metadata != null)) return;
+                       if(persistent)
+                               container.activate(origSFI, 1);
                        origSFI.start(null, container, context);
                        origSFI = null;
+                       if(persistent)
+                               container.set(this);
                }
                
                public FreenetURI getURI() {
@@ -87,6 +95,10 @@
                public void onSuccess(ClientPutState state, ObjectContainer 
container, ClientContext context) {
                        logMINOR = Logger.shouldLog(Logger.MINOR, this);
                        if(logMINOR) Logger.minor(this, "Completed "+this);
+                       if(persistent) {
+                               container.activate(SimpleManifestPutter.this, 
1);
+                               container.activate(runningPutHandlers, 1);
+                       }
                        SimpleManifestPutter.this.onFetchable(this, container);
                        synchronized(SimpleManifestPutter.this) {
                                runningPutHandlers.remove(this);
@@ -94,12 +106,16 @@
                                        return;
                                }
                        }
+                       if(persistent)
+                               container.set(runningPutHandlers);
                        insertedAllFiles(container);
                }
 
                public void onFailure(InsertException e, ClientPutState state, 
ObjectContainer container, ClientContext context) {
                        logMINOR = Logger.shouldLog(Logger.MINOR, this);
                        if(logMINOR) Logger.minor(this, "Failed: "+this+" - 
"+e, e);
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        fail(e, container);
                }
 
@@ -108,6 +124,10 @@
                        if(metadata == null) {
                                // The file was too small to have its own 
metadata, we get this instead.
                                // So we make the key into metadata.
+                               if(persistent) {
+                                       container.activate(key, 5);
+                                       
container.activate(SimpleManifestPutter.this, 1);
+                               }
                                Metadata m =
                                        new Metadata(Metadata.SIMPLE_REDIRECT, 
key.getURI(), cm);
                                onMetadata(m, null, container, context);
@@ -125,34 +145,54 @@
                                return;
                        }
                        metadata = m;
+                       if(persistent) {
+                               
container.activate(putHandlersWaitingForMetadata, 1);
+                       }
                        synchronized(SimpleManifestPutter.this) {
                                putHandlersWaitingForMetadata.remove(this);
                                if(!putHandlersWaitingForMetadata.isEmpty()) 
return;
                        }
+                       if(persistent) {
+                               container.set(putHandlersWaitingForMetadata);
+                               container.set(this);
+                               container.activate(SimpleManifestPutter.this, 
1);
+                       }
                        gotAllMetadata(container, context);
                }
 
                public void addBlock(ObjectContainer container) {
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        SimpleManifestPutter.this.addBlock(container);
                }
                
                public void addBlocks(int num, ObjectContainer container) {
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        SimpleManifestPutter.this.addBlocks(num, container);
                }
                
                public void completedBlock(boolean dontNotify, ObjectContainer 
container, ClientContext context) {
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        SimpleManifestPutter.this.completedBlock(dontNotify, 
container, context);
                }
                
                public void failedBlock(ObjectContainer container, 
ClientContext context) {
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        SimpleManifestPutter.this.failedBlock(container, 
context);
                }
                
                public void fatallyFailedBlock(ObjectContainer container, 
ClientContext context) {
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        SimpleManifestPutter.this.fatallyFailedBlock(container, 
context);
                }
                
                public void addMustSucceedBlocks(int blocks, ObjectContainer 
container) {
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        SimpleManifestPutter.this.addMustSucceedBlocks(blocks, 
container);
                }
                
@@ -161,18 +201,28 @@
                }
 
                public void onBlockSetFinished(ClientPutState state, 
ObjectContainer container, ClientContext context) {
+                       if(persistent) {
+                               container.activate(SimpleManifestPutter.this, 
1);
+                               container.activate(waitingForBlockSets, 1);
+                       }
                        synchronized(SimpleManifestPutter.this) {
                                waitingForBlockSets.remove(this);
                                if(!waitingForBlockSets.isEmpty()) return;
                        }
+                       if(persistent)
+                               container.set(waitingForBlockSets);
                        SimpleManifestPutter.this.blockSetFinalized(container, 
context);
                }
 
                public void onMajorProgress(ObjectContainer container) {
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        SimpleManifestPutter.this.onMajorProgress(container);
                }
 
                public void onFetchable(ClientPutState state, ObjectContainer 
container) {
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
                        SimpleManifestPutter.this.onFetchable(this, container);
                }
 
@@ -245,6 +295,9 @@
                        Logger.minor(this, "Starting " + this);
                PutHandler[] running;
 
+               if(persistent()) {
+                       container.activate(runningPutHandlers, 2);
+               }
                synchronized (this) {
                        running = (PutHandler[]) runningPutHandlers.toArray(new 
PutHandler[runningPutHandlers.size()]);
                }
@@ -263,10 +316,12 @@
                                Logger.minor(this, "Started " + running.length 
+ " PutHandler's for " + this);
                        if (running.length == 0) {
                                insertedAllFiles = true;
+                               if(persistent())
+                                       container.set(this);
                                gotAllMetadata(container, context);
                        }
                } catch (InsertException e) {
-                       cancelAndFinish();
+                       cancelAndFinish(container);
                        throw e;
                }
        }
@@ -335,6 +390,9 @@
        }
 
        private void gotAllMetadata(ObjectContainer container, ClientContext 
context) {
+               if(persistent()) {
+                       container.activate(putHandlersByName, 1);
+               }
                if(logMINOR) Logger.minor(this, "Got all metadata");
                HashMap namesToByteArrays = new HashMap();
                namesToByteArrays(putHandlersByName, namesToByteArrays);
@@ -357,6 +415,9 @@
                }
                baseMetadata =
                        
Metadata.mkRedirectionManifestWithMetadata(namesToByteArrays);
+               if(persistent()) {
+                       container.set(baseMetadata);
+               }
                resolveAndStartBase(container, context);
                
        }
@@ -408,11 +469,16 @@
                                ZipOutputStream zos = new ZipOutputStream(os);
                                ZipEntry ze;
                                
+                               if(persistent()) {
+                                       container.activate(elementsToPutInZip, 
2);
+                               }
                                for(Iterator 
i=elementsToPutInZip.iterator();i.hasNext();) {
                                        PutHandler ph = (PutHandler) i.next();
                                        ze = new ZipEntry(ph.targetInZip);
                                        ze.setTime(0);
                                        zos.putNextEntry(ze);
+                                       if(persistent())
+                                               container.activate(ph.data, 5);
                                        BucketTools.copyTo(ph.data, zos, 
ph.data.size());
                                }
                                
@@ -449,9 +515,17 @@
                        SingleFileInserter metadataInserter = 
                                new SingleFileInserter(this, this, block, 
isMetadata, ctx, false, getCHKOnly, false, baseMetadata, 
insertAsArchiveManifest, true, null, earlyEncode);
                        if(logMINOR) Logger.minor(this, "Inserting main 
metadata: "+metadataInserter);
+                       if(persistent()) {
+                               container.activate(metadataPuttersByMetadata, 
2);
+                               container.activate(metadataPuttersUnfetchable, 
2);
+                       }
                        this.metadataPuttersByMetadata.put(baseMetadata, 
metadataInserter);
                        metadataPuttersUnfetchable.put(baseMetadata, 
metadataInserter);
                        metadataInserter.start(null, container, context);
+                       if(persistent()) {
+                               container.set(metadataPuttersByMetadata);
+                               container.set(metadataPuttersUnfetchable);
+                       }
                } catch (InsertException e) {
                        fail(e, container);
                }
@@ -460,6 +534,8 @@
        private boolean resolve(MetadataUnresolvedException e, ObjectContainer 
container, ClientContext context) throws InsertException, IOException {
                Metadata[] metas = e.mustResolve;
                boolean mustWait = false;
+               if(persistent())
+                       container.activate(metadataPuttersByMetadata, 2);
                for(int i=0;i<metas.length;i++) {
                        Metadata m = metas[i];
                        if(!m.isResolved())
@@ -482,6 +558,8 @@
                                resolve(e1, container, context);
                        }
                }
+               if(persistent())
+                       container.set(metadataPuttersByMetadata);
                return mustWait;
        }
 
@@ -517,25 +595,33 @@
                        }
                        finished = true;
                }
+               if(persistent())
+                       container.set(this);
                complete(container);
        }
        
        private void complete(ObjectContainer container) {
+               if(persistent())
+                       container.activate(cb, 1);
                cb.onSuccess(this, container);
        }
 
        private void fail(InsertException e, ObjectContainer container) {
                // Cancel all, then call the callback
-               cancelAndFinish();
+               cancelAndFinish(container);
                
+               if(persistent())
+                       container.activate(cb, 1);
                cb.onFailure(e, this, container);
        }
        
        /**
         * Cancel all running inserters and set finished to true.
         */
-       private void cancelAndFinish() {
+       private void cancelAndFinish(ObjectContainer container) {
                PutHandler[] running;
+               if(persistent())
+                       container.activate(runningPutHandlers, 2);
                synchronized(this) {
                        if(finished) return;
                        running = (PutHandler[]) runningPutHandlers.toArray(new 
PutHandler[runningPutHandlers.size()]);
@@ -554,6 +640,9 @@
        
        public void onSuccess(ClientPutState state, ObjectContainer container, 
ClientContext context) {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
+               if(persistent()) {
+                       container.activate(metadataPuttersByMetadata, 2);
+               }
                synchronized(this) {
                        metadataPuttersByMetadata.remove(state.getToken());
                        if(!metadataPuttersByMetadata.isEmpty()) {
@@ -572,6 +661,10 @@
                        }
                        finished = true;
                }
+               if(persistent()) {
+                       container.set(metadataPuttersByMetadata);
+                       container.set(this);
+               }
                complete(container);
        }
        
@@ -584,7 +677,11 @@
                if(state.getToken() == baseMetadata) {
                        this.finalURI = key.getURI();
                        if(logMINOR) Logger.minor(this, "Got metadata key: 
"+finalURI);
+                       if(persistent())
+                               container.activate(cb, 1);
                        cb.onGeneratedURI(finalURI, this, container);
+                       if(persistent())
+                               container.set(this);
                } else {
                        // It's a sub-Metadata
                        Metadata m = (Metadata) state.getToken();
@@ -605,6 +702,10 @@
        }
 
        public void notifyClients(ObjectContainer container, ClientContext 
context) {
+               if(persistent()) {
+                       container.activate(ctx, 1);
+                       container.activate(ctx.eventProducer, 1);
+               }
                ctx.eventProducer.produceEvent(new 
SplitfileProgressEvent(this.totalBlocks, this.successfulBlocks, 
this.failedBlocks, this.fatallyFailedBlocks, this.minSuccessBlocks, 
this.blockSetFinalized), container, context);
        }
 
@@ -614,6 +715,8 @@
                        if(!waitingForBlockSets.isEmpty()) return;
                }
                this.blockSetFinalized(container, context);
+               if(persistent())
+                       container.set(this);
        }
 
        public void blockSetFinalized(ObjectContainer container, ClientContext 
context) {
@@ -622,6 +725,8 @@
                        if(waitingForBlockSets.isEmpty()) return;
                }
                super.blockSetFinalized(container, context);
+               if(persistent())
+                       container.set(this);
        }
        
        /**
@@ -711,10 +816,17 @@
        }
 
        public void onMajorProgress(ObjectContainer container) {
+               if(persistent())
+                       container.activate(cb, 1);
                cb.onMajorProgress(container);
        }
 
        protected void onFetchable(PutHandler handler, ObjectContainer 
container) {
+               if(persistent()) {
+                       container.activate(putHandlersWaitingForFetchable, 1);
+                       container.activate(metadataPuttersUnfetchable, 1);
+                       container.activate(cb, 1);
+               }
                synchronized(this) {
                        putHandlersWaitingForFetchable.remove(handler);
                        if(fetchable) return;
@@ -723,11 +835,21 @@
                        if(!metadataPuttersUnfetchable.isEmpty()) return;
                        fetchable = true;
                }
+               if(persistent()) {
+                       container.set(putHandlersWaitingForMetadata);
+                       container.set(this);
+               }
                cb.onFetchable(this, container);
        }
 
        public void onFetchable(ClientPutState state, ObjectContainer 
container) {
                Metadata m = (Metadata) state.getToken();
+               if(persistent()) {
+                       container.activate(m, 100);
+                       container.activate(metadataPuttersUnfetchable, 1);
+                       container.activate(putHandlersWaitingForFetchable, 1);
+                       container.activate(cb, 1);
+               }
                synchronized(this) {
                        metadataPuttersUnfetchable.remove(m);
                        if(!metadataPuttersUnfetchable.isEmpty()) return;
@@ -735,6 +857,10 @@
                        if(!putHandlersWaitingForFetchable.isEmpty()) return;
                        fetchable = true;
                }
+               if(persistent()) {
+                       container.set(metadataPuttersUnfetchable);
+                       container.set(this);
+               }
                cb.onFetchable(this, container);
        }
 

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to