Author: toad
Date: 2008-11-27 02:09:49 +0000 (Thu, 27 Nov 2008)
New Revision: 23903

Modified:
   trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
   trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
   trunk/freenet/src/freenet/client/async/SingleFileInserter.java
   trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
   trunk/freenet/src/freenet/client/async/USKInserter.java
Log:
Free intermediary metadata on small inserts.


Modified: trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java      
2008-11-27 01:40:22 UTC (rev 23902)
+++ trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java      
2008-11-27 02:09:49 UTC (rev 23903)
@@ -37,7 +37,7 @@
                        try {
                                sbi = new SingleBlockInserter(this, data, 
(short)-1, 
                                                        
FreenetURI.EMPTY_CHK_URI, ctx, this, false, 
-                                                       CHKBlock.DATA_LENGTH, 
ctr, false, false, false, data);
+                                                       CHKBlock.DATA_LENGTH, 
ctr, false, false, false, data, true);
                        } catch (Throwable e) {
                                Logger.error(this, "Caught trying to insert 
healing block: "+e, e);
                                return false;

Modified: trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-11-27 01:40:22 UTC (rev 23902)
+++ trunk/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-11-27 02:09:49 UTC (rev 23903)
@@ -49,8 +49,9 @@
        final boolean getCHKOnly;
        final int sourceLength;
        private int consecutiveRNFs;
+       private boolean freeData;
        
-       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) {
+       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, boolean freeData) {
                this.consecutiveRNFs = 0;
                this.tokenObject = tokenObject;
                this.token = token;
@@ -59,6 +60,7 @@
                this.retries = 0;
                this.finished = false;
                this.ctx = ctx;
+               this.freeData = freeData;
                errors = new FailureCodeTracker(true);
                this.cb = cb;
                this.uri = uri;
@@ -199,6 +201,8 @@
                else
                        parent.failedBlock();
                cb.onFailure(e, this);
+               if(freeData)
+                       sourceData.free();
        }
 
        public ClientKeyBlock getBlock() {
@@ -267,6 +271,8 @@
                synchronized(this) {
                        finished = true;
                }
+               if(freeData)
+                       sourceData.free();
                parent.completedBlock(false);
                cb.onSuccess(this);
        }
@@ -280,6 +286,8 @@
                        if(finished) return;
                        finished = true;
                }
+               if(freeData)
+                       sourceData.free();
                super.unregister(false);
                cb.onFailure(new InsertException(InsertException.CANCELLED), 
this);
        }

Modified: trunk/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileInserter.java      
2008-11-27 01:40:22 UTC (rev 23902)
+++ trunk/freenet/src/freenet/client/async/SingleFileInserter.java      
2008-11-27 02:09:49 UTC (rev 23903)
@@ -225,7 +225,7 @@
                                if(fitsInOneBlockAsIs) {
                                        // Just insert it
                                        ClientPutState bi =
-                                               createInserter(parent, data, 
codecNumber, block.desiredURI, ctx, cb, metadata, (int) block.getData().size(), 
-1, getCHKOnly, true, true);
+                                               createInserter(parent, data, 
codecNumber, block.desiredURI, ctx, cb, metadata, (int) block.getData().size(), 
-1, getCHKOnly, true, true, false);
                                        cb.onTransition(this, bi);
                                        bi.schedule();
                                        cb.onBlockSetFinished(this);
@@ -234,7 +234,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);
+                                       SingleBlockInserter dataPutter = new 
SingleBlockInserter(parent, data, codecNumber, FreenetURI.EMPTY_CHK_URI, ctx, 
cb, metadata, (int) origSize, -1, getCHKOnly, true, true, token, false);
                                        Metadata meta = 
makeMetadata(archiveType, null, dataPutter.getURI());
                                        cb.onMetadata(meta, this);
                                        cb.onTransition(this, dataPutter);
@@ -243,7 +243,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);
+                                       SingleBlockInserter dataPutter = new 
SingleBlockInserter(parent, data, codecNumber, FreenetURI.EMPTY_CHK_URI, ctx, 
mcb, metadata, (int) origSize, -1, getCHKOnly, true, false, token, false);
                                        Metadata meta = 
makeMetadata(archiveType, null, dataPutter.getURI());
                                        Bucket metadataBucket;
                                        try {
@@ -256,7 +256,7 @@
                                                Logger.error(this, "Caught " + 
e, e);
                                                throw new 
InsertException(InsertException.INTERNAL_ERROR, "Got 
MetadataUnresolvedException in SingleFileInserter: " + e.toString(), null);
                                        }
-                                       ClientPutState metaPutter = 
createInserter(parent, metadataBucket, (short) -1, block.desiredURI, ctx, mcb, 
true, (int) origSize, -1, getCHKOnly, true, false);
+                                       ClientPutState metaPutter = 
createInserter(parent, metadataBucket, (short) -1, block.desiredURI, ctx, mcb, 
true, (int) origSize, -1, getCHKOnly, true, false, true);
                                        mcb.addURIGenerator(metaPutter);
                                        mcb.add(dataPutter);
                                        cb.onTransition(this, mcb);
@@ -311,21 +311,21 @@
 
        private ClientPutState createInserter(BaseClientPutter parent, Bucket 
data, short compressionCodec, FreenetURI uri, 
                        InsertContext ctx, PutCompletionCallback cb, boolean 
isMetadata, int sourceLength, int token, boolean getCHKOnly, 
-                       boolean addToParent, boolean encodeCHK) throws 
InsertException {
+                       boolean addToParent, boolean encodeCHK, boolean 
freeData) throws InsertException {
                
                uri.checkInsertURI(); // will throw an exception if needed
                
                if(uri.getKeyType().equals("USK")) {
                        try {
                                return new USKInserter(parent, data, 
compressionCodec, uri, ctx, cb, isMetadata, sourceLength, token, 
-                                       getCHKOnly, addToParent, this.token);
+                                       getCHKOnly, addToParent, this.token, 
freeData);
                        } catch (MalformedURLException e) {
                                throw new 
InsertException(InsertException.INVALID_URI, e, null);
                        }
                } else {
                        SingleBlockInserter sbi = 
                                new SingleBlockInserter(parent, data, 
compressionCodec, uri, ctx, cb, isMetadata, sourceLength, token, 
-                                               getCHKOnly, addToParent, false, 
this.token);
+                                               getCHKOnly, addToParent, false, 
this.token, freeData);
                        if(encodeCHK)
                                cb.onEncode(sbi.getBlock().getClientKey(), 
this);
                        return sbi;

Modified: trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java        
2008-11-27 01:40:22 UTC (rev 23902)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java        
2008-11-27 02:09:49 UTC (rev 23903)
@@ -406,7 +406,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);
+                                               i, getCHKOnly, false, false, 
parent.token, false);
                                dataBlockInserters[i].schedule();
                                fin = false;
                        } else {
@@ -438,7 +438,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);
+                                                       getCHKOnly, false, 
false, parent.token, false);
                                        checkBlockInserters[i].schedule();
                                        fin = false;
                                } else
@@ -474,7 +474,7 @@
                                                checkBlocks[i], (short) -1, 
FreenetURI.EMPTY_CHK_URI,
                                                blockInsertContext, this, 
false, CHKBlock.DATA_LENGTH,
                                                i + dataBlocks.length, 
getCHKOnly, false, false,
-                                               parent.token);
+                                               parent.token, false);
                                checkBlockInserters[i].schedule();
                        }
                } catch (Throwable t) {

Modified: trunk/freenet/src/freenet/client/async/USKInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKInserter.java     2008-11-27 
01:40:22 UTC (rev 23902)
+++ trunk/freenet/src/freenet/client/async/USKInserter.java     2008-11-27 
02:09:49 UTC (rev 23903)
@@ -50,6 +50,7 @@
        private boolean finished;
        /** After attempting inserts on this many slots, go back to the Fetcher 
*/
        private static final long MAX_TRIED_SLOTS = 10;
+       private boolean freeData;
        
        public void schedule() throws InsertException {
                // Caller calls schedule()
@@ -123,7 +124,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);
+                                       ctx, this, isMetadata, sourceLength, 
token, getCHKOnly, false, true /* we don't use it */, tokenObject, freeData);
                }
                try {
                        sbi.schedule();
@@ -165,7 +166,7 @@
 
        public USKInserter(BaseClientPutter parent, Bucket data, short 
compressionCodec, FreenetURI uri, 
                        InsertContext ctx, PutCompletionCallback cb, boolean 
isMetadata, int sourceLength, int token, 
-                       boolean getCHKOnly, boolean addToParent, Object 
tokenObject) throws MalformedURLException {
+                       boolean getCHKOnly, boolean addToParent, Object 
tokenObject, boolean freeData) throws MalformedURLException {
                this.tokenObject = tokenObject;
                this.parent = parent;
                this.data = data;
@@ -184,6 +185,7 @@
                privUSK = InsertableUSK.createInsertable(uri);
                pubUSK = privUSK.getUSK();
                edition = pubUSK.suggestedEdition;
+               this.freeData = freeData;
        }
 
        public BaseClientPutter getParent() {
@@ -198,6 +200,8 @@
                synchronized(this) {
                        finished = true;
                }
+               if(freeData)
+                       data.free();
                cb.onFailure(new InsertException(InsertException.CANCELLED), 
this);
        }
 

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

Reply via email to