Author: toad
Date: 2008-06-20 00:39:30 +0000 (Fri, 20 Jun 2008)
New Revision: 20512

Modified:
   branches/db4o/freenet/src/freenet/client/InsertBlock.java
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
   branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
Log:
Fix SingleFileInserter likewise (mostly SplitHandler, SFI itself doesn't have 
much that is changeable).

Modified: branches/db4o/freenet/src/freenet/client/InsertBlock.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/InsertBlock.java   2008-06-20 
00:17:52 UTC (rev 20511)
+++ branches/db4o/freenet/src/freenet/client/InsertBlock.java   2008-06-20 
00:39:30 UTC (rev 20512)
@@ -3,6 +3,8 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.client;

+import com.db4o.ObjectContainer;
+
 import freenet.keys.FreenetURI;
 import freenet.support.api.Bucket;

@@ -31,11 +33,15 @@
                return (isFreed ? null : data);
        }

-       public void free(){
+       public void free(ObjectContainer container){
                synchronized (this) {
                        if(isFreed) return;
                        isFreed = true;
                }
                data.free();
+               if(container != null) {
+                       data.removeFrom(container);
+                       container.delete(this);
+               }
        }
 }

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-20 00:17:52 UTC (rev 20511)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-06-20 00:39:30 UTC (rev 20512)
@@ -312,7 +312,10 @@
                                } else {
                                        Logger.error(this, "Could not find 
client grabber for client "+req.getClient()+" from "+chosenTracker);
                                }
-                               innerRegister(req, random);
+                               if(req.persistent())
+                                       innerRegister(req, random);
+                               else
+                                       schedTransient.innerRegister(req, 
random);
                                continue; // Try the next one on this retry 
count.
                        }
                        // Check recentSuccesses

Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2008-06-20 00:17:52 UTC (rev 20511)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2008-06-20 00:39:30 UTC (rev 20512)
@@ -378,6 +378,8 @@
                                sfi = newSFI;
                                metadataPutter = newMetaPutter;
                        }
+                       if(parent.persistent())
+                               container.set(this);
                }

                public SplitHandler() {
@@ -389,6 +391,8 @@
                                sfi = newState;
                        if(oldState == metadataPutter)
                                metadataPutter = newState;
+                       if(parent.persistent())
+                               container.set(this);
                }

                public void onSuccess(ClientPutState state, ObjectContainer 
container, ClientContext context) {
@@ -397,8 +401,11 @@
                        boolean lateStart = false;
                        synchronized(this) {
                                if(finished){
-                                       if(freeData)
-                                               block.free();
+                                       if(freeData) {
+                                               block.free(container);
+                                               if(parent.persistent())
+                                                       container.set(this);
+                                       }
                                        return;
                                }
                                if(state == sfi) {
@@ -420,6 +427,8 @@
                                        finished = true;
                                }
                        }
+                       if(parent.persistent())
+                               container.set(this);
                        if(lateStart)
                                startMetadata(container, context);
                        else if(finished)
@@ -430,7 +439,7 @@
                        synchronized(this) {
                                if(finished){
                                        if(freeData)
-                                               block.free();
+                                               block.free(container);
                                        return;
                                }
                        }
@@ -459,6 +468,8 @@
                                }
                        }
                        if(reportMetadataOnly) {
+                               if(parent.persistent())
+                                       container.set(this);
                                cb.onMetadata(meta, this, container, context);
                                return;
                        }
@@ -512,6 +523,8 @@
                                        metadataPutter = new 
SingleFileInserter(parent, this, newBlock, true, ctx, false, getCHKOnly, false, 
token, false, true, metaPutterTargetFilename, earlyEncode);
                                        // If EarlyEncode, then start the 
metadata insert ASAP, to get the key.
                                        // Otherwise, wait until the data is 
fetchable (to improve persistence).
+                                       if(parent.persistent())
+                                               container.set(this);
                                        if(!(earlyEncode || 
splitInsertSuccess)) return;
                                }
                                if(logMINOR) Logger.minor(this, "Putting 
metadata on "+metadataPutter+" from "+sfi+" 
("+((SplitFileInserter)sfi).getLength()+ ')');
@@ -525,13 +538,15 @@
                        synchronized(this) {
                                if(finished){
                                        if(freeData)
-                                               block.free();
+                                               block.free(container);
                                        return;
                                }
                                finished = true;
                                oldSFI = sfi;
                                oldMetadataPutter = metadataPutter;
                        }
+                       if(parent.persistent())
+                               container.set(this);
                        if(oldSFI != null)
                                oldSFI.cancel(container, context);
                        if(oldMetadataPutter != null)
@@ -558,13 +573,15 @@
                                oldSFI = sfi;
                                oldMetadataPutter = metadataPutter;
                        }
+                       if(parent.persistent())
+                               container.set(this);
                        if(oldSFI != null)
                                oldSFI.cancel(container, context);
                        if(oldMetadataPutter != null)
                                oldMetadataPutter.cancel(container, context);

                        if(freeData)
-                               block.free();
+                               block.free(container);
                }

                public void onBlockSetFinished(ClientPutState state, 
ObjectContainer container, ClientContext context) {
@@ -573,6 +590,8 @@
                                        splitInsertSetBlocks = true;
                                else if (state == metadataPutter)
                                        metaInsertSetBlocks = true;
+                               if(parent.persistent())
+                                       container.set(this);
                                if(!(splitInsertSetBlocks && 
metaInsertSetBlocks)) 
                                        return;
                        }
@@ -620,12 +639,17 @@
                                        if(logMINOR) Logger.minor(this, 
"Metadata fetchable"+(metaFetchable?"":" already"));
                                        if(metaFetchable) return;
                                        metaFetchable = true;
+                                       if(parent.persistent())
+                                               container.set(this);
                                } else {
                                        if(state != sfi) {
                                                Logger.error(this, "onFetchable 
for unknown state "+state);
                                                return;
                                        }
+                                       if(dataFetchable) return;
                                        dataFetchable = true;
+                                       if(parent.persistent())
+                                               container.set(this);
                                        if(logMINOR) Logger.minor(this, "Data 
fetchable");
                                        if(metaInsertStarted) return;
                                }
@@ -648,6 +672,8 @@
                                                metaInsertStarted = true;
                                        splitInserter = sfi;
                                }
+                               if(parent.persistent())
+                                       container.set(this);
                                if(putter != null) {
                                        if(logMINOR) Logger.minor(this, 
"Starting metadata inserter: "+putter+" for "+this);
                                        putter.schedule(container, context);
@@ -671,7 +697,7 @@

        public void cancel(ObjectContainer container, ClientContext context) {
                if(freeData)
-                       block.free();
+                       block.free(container);
        }

        public void schedule(ObjectContainer container, ClientContext context) 
throws InsertException {


Reply via email to