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);