Author: toad
Date: 2008-06-19 23:45:04 +0000 (Thu, 19 Jun 2008)
New Revision: 20508
Modified:
branches/db4o/freenet/src/freenet/client/async/BinaryBlobInserter.java
branches/db4o/freenet/src/freenet/client/async/ClientRequester.java
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
branches/db4o/freenet/src/freenet/client/async/USKInserter.java
Log:
async.ClientRequester: set() when updated. This may be enough to get minimal
persistence working; the immediate blockage was that it didn't know how many
blocks were done.
Modified: branches/db4o/freenet/src/freenet/client/async/BinaryBlobInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/BinaryBlobInserter.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/BinaryBlobInserter.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -65,7 +65,7 @@
}
inserters = (MySendableInsert[]) myInserters.toArray(new
MySendableInsert[myInserters.size()]);
- parent.addMustSucceedBlocks(inserters.length);
+ parent.addMustSucceedBlocks(inserters.length, container);
parent.notifyClients(container, context);
}
Modified: branches/db4o/freenet/src/freenet/client/async/ClientRequester.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequester.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequester.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -64,20 +64,23 @@
}
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Finalized set of blocks for "+this,
new Exception("debug"));
+ if(persistent())
+ container.set(this);
notifyClients(container, context);
}
- public synchronized void addBlock() {
+ public synchronized void addBlock(ObjectContainer container) {
if(blockSetFinalized)
if(Logger.globalGetThreshold() > Logger.MINOR)
Logger.error(this, "addBlock() but set
finalized! on "+this);
else
Logger.error(this, "addBlock() but set
finalized! on "+this, new Exception("error"));
totalBlocks++;
- if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this,
"addBlock(): total="+totalBlocks+" successful="+successfulBlocks+"
failed="+failedBlocks+" required="+minSuccessBlocks);
+ if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this,
"addBlock(): total="+totalBlocks+" successful="+successfulBlocks+"
failed="+failedBlocks+" required="+minSuccessBlocks);
+ if(persistent()) container.set(this);
}
- public synchronized void addBlocks(int num) {
+ public synchronized void addBlocks(int num, ObjectContainer container) {
if(blockSetFinalized)
if(Logger.globalGetThreshold() > Logger.MINOR)
Logger.error(this, "addBlocks() but set
finalized! on "+this);
@@ -85,6 +88,7 @@
Logger.error(this, "addBlocks() but set
finalized! on "+this, new Exception("error"));
totalBlocks+=num;
if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this,
"addBlocks("+num+"): total="+totalBlocks+" successful="+successfulBlocks+"
failed="+failedBlocks+" required="+minSuccessBlocks);
+ if(persistent()) container.set(this);
}
public void completedBlock(boolean dontNotify, ObjectContainer
container, ClientContext context) {
@@ -94,6 +98,7 @@
successfulBlocks++;
if(dontNotify) return;
}
+ if(persistent()) container.set(this);
notifyClients(container, context);
}
@@ -101,6 +106,7 @@
synchronized(this) {
failedBlocks++;
}
+ if(persistent()) container.set(this);
notifyClients(container, context);
}
@@ -108,11 +114,13 @@
synchronized(this) {
fatallyFailedBlocks++;
}
+ if(persistent()) container.set(this);
notifyClients(container, context);
}
- public synchronized void addMustSucceedBlocks(int blocks) {
+ public synchronized void addMustSucceedBlocks(int blocks,
ObjectContainer container) {
minSuccessBlocks += blocks;
+ if(persistent()) container.set(this);
if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this,
"addMustSucceedBlocks("+blocks+"): total="+totalBlocks+"
successful="+successfulBlocks+" failed="+failedBlocks+"
required="+minSuccessBlocks);
}
@@ -129,6 +137,7 @@
ctx.getChkInsertScheduler().reregisterAll(this, container);
ctx.getSskFetchScheduler().reregisterAll(this, container);
ctx.getSskInsertScheduler().reregisterAll(this, container);
+ if(persistent()) container.set(this);
}
public boolean persistent() {
Modified:
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -132,12 +132,12 @@
gotAllMetadata(container, context);
}
- public void addBlock() {
- SimpleManifestPutter.this.addBlock();
+ public void addBlock(ObjectContainer container) {
+ SimpleManifestPutter.this.addBlock(container);
}
- public void addBlocks(int num) {
- SimpleManifestPutter.this.addBlocks(num);
+ public void addBlocks(int num, ObjectContainer container) {
+ SimpleManifestPutter.this.addBlocks(num, container);
}
public void completedBlock(boolean dontNotify, ObjectContainer
container, ClientContext context) {
@@ -152,8 +152,8 @@
SimpleManifestPutter.this.fatallyFailedBlock(container,
context);
}
- public void addMustSucceedBlocks(int blocks) {
- SimpleManifestPutter.this.addMustSucceedBlocks(blocks);
+ public void addMustSucceedBlocks(int blocks, ObjectContainer
container) {
+ SimpleManifestPutter.this.addMustSucceedBlocks(blocks,
container);
}
public void notifyClients(ObjectContainer container,
ClientContext context) {
Modified:
branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -32,9 +32,9 @@
this.rcb = rcb;
this.token = l;
if(!dontAdd) {
- parent.addBlock();
+ parent.addBlock(container);
if(isEssential)
- parent.addMustSucceedBlocks(1);
+ parent.addMustSucceedBlocks(1, container);
parent.notifyClients(container, context);
}
}
Modified:
branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -75,8 +75,8 @@
this.sourceLength = sourceLength;
this.getCHKOnly = getCHKOnly;
if(addToParent) {
- parent.addBlock();
- parent.addMustSucceedBlocks(1);
+ parent.addBlock(container);
+ parent.addMustSucceedBlocks(1, container);
parent.notifyClients(container, context);
}
logMINOR = Logger.shouldLog(Logger.MINOR, this);
Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -762,7 +762,7 @@
context.uskManager.getFetcher(usk.copy(-usk.suggestedEdition), ctx, false,
requester.persistent(),
new
MyUSKFetcherCallback(requester, cb, clientMetadata, usk, metaStrings, ctx,
actx, maxRetries, recursionLevel, dontTellClientGet, l, returnBucket),
container, context);
if(isEssential)
- requester.addMustSucceedBlocks(1);
+ requester.addMustSucceedBlocks(1, container);
return tag;
}
}
Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -94,7 +94,7 @@
// If we succeed, we bypass both compression
and FEC encoding!
try {
SplitHandler sh = new SplitHandler();
- sh.start(fs, false, context);
+ sh.start(fs, false, container, context);
cb.onTransition(this, sh, container);
sh.schedule(container, context);
return;
@@ -341,7 +341,7 @@
* @throws InsertException Thrown if some other error prevents
the insert
* from starting.
*/
- void start(SimpleFieldSet fs, boolean forceMetadata,
ClientContext context) throws ResumeException, InsertException {
+ void start(SimpleFieldSet fs, boolean forceMetadata,
ObjectContainer container, ClientContext context) throws ResumeException,
InsertException {
boolean meta = metadata || forceMetadata;
@@ -351,7 +351,7 @@
if(sfiFS == null)
throw new ResumeException("No
SplitFileInserter");
ClientPutState newSFI, newMetaPutter = null;
- newSFI = new SplitFileInserter(parent, this,
forceMetadata ? null : block.clientMetadata, ctx, getCHKOnly, meta, token,
insertAsArchiveManifest, sfiFS, context);
+ newSFI = new SplitFileInserter(parent, this,
forceMetadata ? null : block.clientMetadata, ctx, getCHKOnly, meta, token,
insertAsArchiveManifest, sfiFS, container, context);
if(logMINOR) Logger.minor(this, "Starting "+newSFI+"
for "+this);
fs.removeSubset("SplitFileInserter");
SimpleFieldSet metaFS = fs.subset("MetadataPutter");
@@ -361,10 +361,10 @@
if(type.equals("SplitFileInserter")) {
// FIXME
insertAsArchiveManifest ?!?!?!
newMetaPutter =
- new
SplitFileInserter(parent, this, null, ctx, getCHKOnly, true, token,
insertAsArchiveManifest, metaFS, context);
+ new
SplitFileInserter(parent, this, null, ctx, getCHKOnly, true, token,
insertAsArchiveManifest, metaFS, container, context);
} else if(type.equals("SplitHandler")) {
newMetaPutter = new
SplitHandler();
-
((SplitHandler)newMetaPutter).start(metaFS, true, context);
+
((SplitHandler)newMetaPutter).start(metaFS, true, container, context);
}
} catch (ResumeException e) {
newMetaPutter = null;
Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -168,8 +168,8 @@
throw new
FetchException(FetchException.INVALID_METADATA, "Unable to allocate all check
blocks to segments - buggy or malicious inserter");
}
this.token = token2;
- parent.addBlocks(splitfileDataBlocks.length +
splitfileCheckBlocks.length);
- parent.addMustSucceedBlocks(splitfileDataBlocks.length);
+ parent.addBlocks(splitfileDataBlocks.length +
splitfileCheckBlocks.length, container);
+ parent.addMustSucceedBlocks(splitfileDataBlocks.length,
container);
}
/** Return the final status of the fetch. Throws an exception, or
returns a
Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -109,7 +109,7 @@
parent.onMajorProgress();
}
- public SplitFileInserter(BaseClientPutter parent, PutCompletionCallback
cb, ClientMetadata clientMetadata, InsertContext ctx, boolean getCHKOnly,
boolean metadata, Object token, boolean insertAsArchiveManifest, SimpleFieldSet
fs, ClientContext context) throws ResumeException {
+ public SplitFileInserter(BaseClientPutter parent, PutCompletionCallback
cb, ClientMetadata clientMetadata, InsertContext ctx, boolean getCHKOnly,
boolean metadata, Object token, boolean insertAsArchiveManifest, SimpleFieldSet
fs, ObjectContainer container, ClientContext context) throws ResumeException {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
this.parent = parent;
this.insertAsArchiveManifest = insertAsArchiveManifest;
@@ -186,7 +186,7 @@
SimpleFieldSet segment = segFS.subset(index);
segFS.removeSubset(index);
if(segment == null) throw new ResumeException("No
segment "+i);
- segments[i] = new SplitFileInserterSegment(this,
segment, splitfileAlgorithm, ctx, getCHKOnly, i, context);
+ segments[i] = new SplitFileInserterSegment(this,
segment, splitfileAlgorithm, ctx, getCHKOnly, i, context, container);
dataBlocks += segments[i].countDataBlocks();
checkBlocks += segments[i].countCheckBlocks();
}
@@ -207,7 +207,7 @@
if((dataBlocks < segmentSize) || (segmentSize == -1)) {
// Single segment
FECCodec codec = FECCodec.getCodec(splitfileAlgorithm,
origDataBlocks.length, executor);
- SplitFileInserterSegment onlySeg = new
SplitFileInserterSegment(this, codec, origDataBlocks, ctx, getCHKOnly, 0);
+ SplitFileInserterSegment onlySeg = new
SplitFileInserterSegment(this, codec, origDataBlocks, ctx, getCHKOnly, 0,
container);
segs.add(onlySeg);
} else {
int j = 0;
@@ -220,7 +220,7 @@
for(int x=0;x<seg.length;x++)
if(seg[x] == null) throw new
NullPointerException("In splitIntoSegs: "+x+" is null of "+seg.length+" of
"+segNo);
FECCodec codec =
FECCodec.getCodec(splitfileAlgorithm, seg.length, executor);
- SplitFileInserterSegment s = new
SplitFileInserterSegment(this, codec, seg, ctx, getCHKOnly, segNo);
+ SplitFileInserterSegment s = new
SplitFileInserterSegment(this, codec, seg, ctx, getCHKOnly, segNo, container);
segs.add(s);
if(i == dataBlocks) break;
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2008-06-19 23:27:27 UTC (rev 20507)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -68,7 +68,7 @@
public SplitFileInserterSegment(SplitFileInserter parent,
FECCodec splitfileAlgo, Bucket[] origDataBlocks,
- InsertContext blockInsertContext, boolean getCHKOnly,
int segNo) {
+ InsertContext blockInsertContext, boolean getCHKOnly,
int segNo, ObjectContainer container) {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
this.parent = parent;
this.getCHKOnly = getCHKOnly;
@@ -83,8 +83,8 @@
dataURIs = new ClientCHK[origDataBlocks.length];
dataBlockInserters = new SingleBlockInserter[dataBlocks.length];
checkBlockInserters = new
SingleBlockInserter[checkBlocks.length];
- parent.parent.addBlocks(dataURIs.length + checkURIs.length);
- parent.parent.addMustSucceedBlocks(dataURIs.length +
checkURIs.length);
+ parent.parent.addBlocks(dataURIs.length + checkURIs.length,
container);
+ parent.parent.addMustSucceedBlocks(dataURIs.length +
checkURIs.length, container);
this.segNo = segNo;
}
@@ -95,7 +95,7 @@
*/
public SplitFileInserterSegment(SplitFileInserter parent,
SimpleFieldSet fs, short splitfileAlgorithm,
InsertContext ctx,
- boolean getCHKOnly, int segNo, ClientContext context)
throws ResumeException {
+ boolean getCHKOnly, int segNo, ClientContext context,
ObjectContainer container) throws ResumeException {
this.parent = parent;
this.getCHKOnly = getCHKOnly;
this.blockInsertContext = ctx;
@@ -310,8 +310,8 @@
throw new ResumeException("Missing data
block " + i
+ " and need to
reconstruct check blocks");
}
- parent.parent.addBlocks(dataURIs.length + checkURIs.length);
- parent.parent.addMustSucceedBlocks(dataURIs.length +
checkURIs.length);
+ parent.parent.addBlocks(dataURIs.length + checkURIs.length,
container);
+ parent.parent.addMustSucceedBlocks(dataURIs.length +
checkURIs.length, container);
}
public synchronized SimpleFieldSet getProgressFieldset() {
Modified: branches/db4o/freenet/src/freenet/client/async/USKInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKInserter.java
2008-06-19 23:27:27 UTC (rev 20507)
+++ branches/db4o/freenet/src/freenet/client/async/USKInserter.java
2008-06-19 23:45:04 UTC (rev 20508)
@@ -109,7 +109,7 @@
if(alreadyInserted) {
// Success!
cb.onEncode(pubUSK.copy(edition), this, container,
context);
- parent.addMustSucceedBlocks(1);
+ parent.addMustSucceedBlocks(1, container);
parent.completedBlock(true, container, context);
cb.onSuccess(this, container, context);
} else {
@@ -179,8 +179,8 @@
this.token = token;
this.getCHKOnly = getCHKOnly;
if(addToParent) {
- parent.addBlock();
- parent.addMustSucceedBlocks(1);
+ parent.addBlock(container);
+ parent.addMustSucceedBlocks(1, container);
parent.notifyClients(container, context);
}
privUSK = InsertableUSK.createInsertable(uri);