Author: toad
Date: 2008-06-25 16:52:31 +0000 (Wed, 25 Jun 2008)
New Revision: 20697

Modified:
   branches/db4o/freenet/src/freenet/client/async/SimpleHealingQueue.java
   branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
   branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
   branches/db4o/freenet/src/freenet/client/async/USKInserter.java
Log:
SplitFileInserterSegment.persistent.
SingleBlockInserter: pass in persistent explicitly, assert that it's the same 
as the parent's.
Activation.

Modified: branches/db4o/freenet/src/freenet/client/async/SimpleHealingQueue.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleHealingQueue.java      
2008-06-25 16:49:38 UTC (rev 20696)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleHealingQueue.java      
2008-06-25 16:52:31 UTC (rev 20697)
@@ -43,7 +43,7 @@
                        try {
                                sbi = new SingleBlockInserter(this, data, 
(short)-1, 
                                                        
FreenetURI.EMPTY_CHK_URI, ctx, this, false, 
-                                                       CHKBlock.DATA_LENGTH, 
ctr, false, false, false, data, null, context);
+                                                       CHKBlock.DATA_LENGTH, 
ctr, false, false, false, data, null, context, false);
                        } catch (Throwable e) {
                                Logger.error(this, "Caught trying to insert 
healing block: "+e, e);
                                return false;

Modified: 
branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-06-25 16:49:38 UTC (rev 20696)
+++ branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-06-25 16:52:31 UTC (rev 20697)
@@ -56,8 +56,9 @@
        final int sourceLength;
        private int consecutiveRNFs;

-       public SingleBlockInserter(BaseClientPutter parent, Bucket data, short 
compressionCodec, FreenetURI uri, InsertContext ctx, PutCompletionCallback cb, 
boolean isMetadata, int sourceLength, int token, boolean getCHKOnly, boolean 
addToParent, boolean dontSendEncoded, Object tokenObject, ObjectContainer 
container, ClientContext context) {
+       public SingleBlockInserter(BaseClientPutter parent, Bucket data, short 
compressionCodec, FreenetURI uri, InsertContext ctx, PutCompletionCallback cb, 
boolean isMetadata, int sourceLength, int token, boolean getCHKOnly, boolean 
addToParent, boolean dontSendEncoded, Object tokenObject, ObjectContainer 
container, ClientContext context, boolean persistent) {
                super(parent.persistent());
+               assert(persistent == parent.persistent());
                this.consecutiveRNFs = 0;
                this.tokenObject = tokenObject;
                this.token = token;

Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2008-06-25 16:49:38 UTC (rev 20696)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2008-06-25 16:52:31 UTC (rev 20697)
@@ -200,7 +200,7 @@
                if (fitsInOneCHK) {
                        // Insert single block, then insert pointer to it
                        if(reportMetadataOnly) {
-                               SingleBlockInserter dataPutter = new 
SingleBlockInserter(parent, data, codecNumber, FreenetURI.EMPTY_CHK_URI, ctx, 
cb, metadata, (int)origSize, -1, getCHKOnly, true, true, token, container, 
context);
+                               SingleBlockInserter dataPutter = new 
SingleBlockInserter(parent, data, codecNumber, FreenetURI.EMPTY_CHK_URI, ctx, 
cb, metadata, (int)origSize, -1, getCHKOnly, true, true, token, container, 
context, persistent);
                                Metadata meta = 
makeMetadata(dataPutter.getURI(container, context));
                                cb.onMetadata(meta, this, container, context);
                                cb.onTransition(this, dataPutter, container);
@@ -209,7 +209,7 @@
                        } else {
                                MultiPutCompletionCallback mcb = 
                                        new MultiPutCompletionCallback(cb, 
parent, token);
-                               SingleBlockInserter dataPutter = new 
SingleBlockInserter(parent, data, codecNumber, FreenetURI.EMPTY_CHK_URI, ctx, 
mcb, metadata, (int)origSize, -1, getCHKOnly, true, false, token, container, 
context);
+                               SingleBlockInserter dataPutter = new 
SingleBlockInserter(parent, data, codecNumber, FreenetURI.EMPTY_CHK_URI, ctx, 
mcb, metadata, (int)origSize, -1, getCHKOnly, true, false, token, container, 
context, persistent);
                                Metadata meta = 
makeMetadata(dataPutter.getURI(container, context));
                                Bucket metadataBucket;
                                try {
@@ -317,7 +317,7 @@
                } else {
                        SingleBlockInserter sbi = 
                                new SingleBlockInserter(parent, data, 
compressionCodec, uri, ctx, cb, isMetadata, sourceLength, token, 
-                                               getCHKOnly, addToParent, false, 
this.token, container, context);
+                                               getCHKOnly, addToParent, false, 
this.token, container, context, persistent);
                        if(encodeCHK)
                                cb.onEncode(sbi.getBlock(container, 
context).getClientKey(), this, container, context);
                        return sbi;
@@ -611,6 +611,8 @@
                }

                public void schedule(ObjectContainer container, ClientContext 
context) throws InsertException {
+                       if(persistent)
+                               container.activate(sfi, 1);
                        sfi.schedule(container, context);
                }

@@ -677,6 +679,8 @@
                                ClientPutState splitInserter;
                                synchronized(this) {
                                        if(metaInsertStarted) return;
+                                       if(persistent)
+                                               
container.activate(metadataPutter, 1);
                                        putter = metadataPutter;
                                        if(putter == null) {
                                                if(logMINOR) Logger.minor(this, 
"Cannot start metadata yet: no metadataPutter");

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2008-06-25 16:49:38 UTC (rev 20696)
+++ 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2008-06-25 16:52:31 UTC (rev 20697)
@@ -66,6 +66,8 @@
        private int blocksGotURI;

        private int blocksCompleted;
+       
+       private final boolean persistent;

        public SplitFileInserterSegment(SplitFileInserter parent,
                        FECCodec splitfileAlgo, Bucket[] origDataBlocks,
@@ -73,6 +75,7 @@
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                this.parent = parent;
                this.getCHKOnly = getCHKOnly;
+               this.persistent = parent.persistent;
                this.errors = new FailureCodeTracker(true);
                this.blockInsertContext = blockInsertContext;
                this.splitfileAlgo = splitfileAlgo;
@@ -99,6 +102,7 @@
                        boolean getCHKOnly, int segNo, ClientContext context, 
ObjectContainer container) throws ResumeException {
                this.parent = parent;
                this.getCHKOnly = getCHKOnly;
+               this.persistent = parent.persistent;
                this.blockInsertContext = ctx;
                this.segNo = segNo;
                if (!"SplitFileInserterSegment".equals(fs.get("Type")))
@@ -397,8 +401,10 @@
        }

        public void start(ObjectContainer container, ClientContext context) 
throws InsertException {
-               if(parent.persistent)
+               if(persistent) {
+                       container.activate(parent, 1);
                        container.activate(parent.parent, 1);
+               }
                if (logMINOR)
                        Logger.minor(this, "Starting segment " + segNo + " of " 
+ parent
                                        + " (" + parent.dataLength + "): " + 
this + " ( finished="
@@ -411,7 +417,7 @@
                                dataBlockInserters[i] = new 
SingleBlockInserter(parent.parent,
                                                dataBlocks[i], (short) -1, 
FreenetURI.EMPTY_CHK_URI,
                                                blockInsertContext, this, 
false, CHKBlock.DATA_LENGTH,
-                                               i, getCHKOnly, false, false, 
parent.token, container, context);
+                                               i, getCHKOnly, false, false, 
parent.token, container, context, persistent);
                                dataBlockInserters[i].schedule(container, 
context);
                                fin = false;
                        } else {
@@ -431,7 +437,7 @@
                                // Encode blocks
                                synchronized(this) {
                                        if(!encoded){
-                                               splitfileAlgo.addToQueue(new 
FECJob(splitfileAlgo, context.fecQueue, dataBlocks, checkBlocks, 
CHKBlock.DATA_LENGTH, blockInsertContext.persistentBucketFactory, this, false, 
parent.parent.getPriorityClass(), parent.persistent), context.fecQueue, 
container);
+                                               splitfileAlgo.addToQueue(new 
FECJob(splitfileAlgo, context.fecQueue, dataBlocks, checkBlocks, 
CHKBlock.DATA_LENGTH, blockInsertContext.persistentBucketFactory, this, false, 
parent.parent.getPriorityClass(), persistent), context.fecQueue, container);
                                        }
                                }                               
                                fin = false;
@@ -443,7 +449,7 @@
                                                        parent.parent, 
checkBlocks[i], (short) -1,
                                                        
FreenetURI.EMPTY_CHK_URI, blockInsertContext, this,
                                                        false, 
CHKBlock.DATA_LENGTH, i + dataBlocks.length,
-                                                       getCHKOnly, false, 
false, parent.token, container, context);
+                                                       getCHKOnly, false, 
false, parent.token, container, context, persistent);
                                        
checkBlockInserters[i].schedule(container, context);
                                        fin = false;
                                } else
@@ -458,7 +464,7 @@
                synchronized (this) {
                        fetchable = (blocksCompleted > dataBlocks.length);
                }
-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);
                if (fetchable)
                        parent.segmentFetchable(this, container);
@@ -472,6 +478,10 @@
        public void onDecodedSegment(ObjectContainer container, ClientContext 
context, FECJob job, Bucket[] dataBuckets, Bucket[] checkBuckets, 
SplitfileBlock[] dataBlockStatus, SplitfileBlock[] checkBlockStatus) {} // 
irrevelant

        public void onEncodedSegment(ObjectContainer container, ClientContext 
context, FECJob job, Bucket[] dataBuckets, Bucket[] checkBuckets, 
SplitfileBlock[] dataBlockStatus, SplitfileBlock[] checkBlockStatus) {
+               if(persistent) {
+                       container.activate(parent, 1);
+                       container.activate(parent.parent, 1);
+               }
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                // Start the inserts
                try {
@@ -490,7 +500,7 @@
                                                checkBlocks[i], (short) -1, 
FreenetURI.EMPTY_CHK_URI,
                                                blockInsertContext, this, 
false, CHKBlock.DATA_LENGTH,
                                                i + dataBlocks.length, 
getCHKOnly, false, false,
-                                               parent.token, container, 
context);
+                                               parent.token, container, 
context, persistent);
                                checkBlockInserters[i].schedule(container, 
context);
                        }
                } catch (Throwable t) {
@@ -505,7 +515,7 @@
                        encoded = true;
                }

-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);

                // Tell parent only after have started the inserts.
@@ -521,7 +531,7 @@
                        }
                }

-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);
        }

@@ -534,7 +544,7 @@
                        finished = true;
                        toThrow = ex;
                }
-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);
                parent.segmentFinished(this, container, context);
        }
@@ -546,7 +556,7 @@
                        finished = true;
                        toThrow = InsertException.construct(errors);
                }
-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);
                parent.segmentFinished(this, container, context);
        }
@@ -570,7 +580,7 @@
                                dataURIs[x] = key;
                        }
                        blocksGotURI++;
-                       if(parent.parent.persistent())
+                       if(persistent)
                                container.set(this);
                        if (blocksGotURI != dataBlocks.length + 
checkBlocks.length)
                                return;
@@ -589,7 +599,7 @@
                        }
                        hasURIs = true;
                }
-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);
                parent.segmentHasURIs(this, container, context);
        }
@@ -624,7 +634,7 @@
                }
                if (total != dataBlockInserters.length + 
checkBlockInserters.length)
                        return;
-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);
                finish(container, context);
        }
@@ -668,7 +678,7 @@
                        }
                }
                blocksCompleted++;
-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);
                return blocksCompleted;
        }
@@ -735,7 +745,7 @@
                                checkBlocks[i] = null;
                        }
                }
-               if(parent.parent.persistent())
+               if(persistent)
                        container.set(this);
                parent.segmentFinished(this, container, context);
        }

Modified: branches/db4o/freenet/src/freenet/client/async/USKInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKInserter.java     
2008-06-25 16:49:38 UTC (rev 20696)
+++ branches/db4o/freenet/src/freenet/client/async/USKInserter.java     
2008-06-25 16:52:31 UTC (rev 20697)
@@ -125,7 +125,7 @@
                        if(Logger.shouldLog(Logger.MINOR, this))
                                Logger.minor(this, "scheduling insert for 
"+pubUSK.getURI()+ ' ' +edition);
                        sbi = new SingleBlockInserter(parent, data, 
compressionCodec, privUSK.getInsertableSSK(edition).getInsertURI(),
-                                       ctx, this, isMetadata, sourceLength, 
token, getCHKOnly, false, true /* we don't use it */, tokenObject, container, 
context);
+                                       ctx, this, isMetadata, sourceLength, 
token, getCHKOnly, false, true /* we don't use it */, tokenObject, container, 
context, parent.persistent());
                }
                try {
                        sbi.schedule(container, context);


Reply via email to