Author: toad
Date: 2006-07-20 22:07:53 +0000 (Thu, 20 Jul 2006)
New Revision: 9682
Modified:
trunk/freenet/src/freenet/client/async/SplitFileInserter.java
trunk/freenet/src/freenet/node/Version.java
Log:
885: Fix a completion failure at 100% on resumed files with some segments
finished.
Modified: trunk/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserter.java
2006-07-20 22:07:23 UTC (rev 9681)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserter.java
2006-07-20 22:07:53 UTC (rev 9682)
@@ -104,7 +104,7 @@
this.getCHKOnly = getCHKOnly;
this.cb = cb;
this.ctx = ctx;
- finished = Fields.stringToBool(fs.get("Finished"), false);
+ // Don't read finished, wait for the segmentFinished()'s.
String length = fs.get("DataLength");
if(length == null) throw new ResumeException("No DataLength");
try {
@@ -207,10 +207,6 @@
for(int i=0;i<segments.length;i++)
segments[i].start();
- if(finished) {
- // FIXME call callback with metadata etc
- }
-
if(countDataBlocks > 32)
parent.onMajorProgress();
@@ -343,26 +339,30 @@
}
finished = true;
}
+ onAllFinished();
+ }
+
+ private void onAllFinished() {
try {
- // Finished !!
- FailureCodeTracker tracker = new FailureCodeTracker(true);
- boolean allSucceeded = true;
- for(int i=0;i<segments.length;i++) {
- InserterException e = segments[i].getException();
- if(e == null) continue;
- allSucceeded = false;
- if(e.errorCodes != null)
- tracker.merge(e.errorCodes);
- tracker.inc(e.getMode());
- }
- if(allSucceeded)
- cb.onSuccess(this);
- else {
- if(tracker.isFatal(true))
- cb.onFailure(new
InserterException(InserterException.FATAL_ERRORS_IN_BLOCKS, tracker, null),
this);
- else
- cb.onFailure(new
InserterException(InserterException.TOO_MANY_RETRIES_IN_BLOCKS, tracker, null),
this);
- }
+ // Finished !!
+ FailureCodeTracker tracker = new
FailureCodeTracker(true);
+ boolean allSucceeded = true;
+ for(int i=0;i<segments.length;i++) {
+ InserterException e =
segments[i].getException();
+ if(e == null) continue;
+ allSucceeded = false;
+ if(e.errorCodes != null)
+ tracker.merge(e.errorCodes);
+ tracker.inc(e.getMode());
+ }
+ if(allSucceeded)
+ cb.onSuccess(this);
+ else {
+ if(tracker.isFatal(true))
+ cb.onFailure(new
InserterException(InserterException.FATAL_ERRORS_IN_BLOCKS, tracker, null),
this);
+ else
+ cb.onFailure(new
InserterException(InserterException.TOO_MANY_RETRIES_IN_BLOCKS, tracker, null),
this);
+ }
} catch (Throwable t) {
// We MUST tell the parent *something*!
Logger.error(this, "Caught "+t, t);
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-20 22:07:23 UTC (rev
9681)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-20 22:07:53 UTC (rev
9682)
@@ -18,7 +18,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 884;
+ private static final int buildNumber = 885;
/** Oldest build of Fred we will talk to */
private static final int oldLastGoodBuild = 870;