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