Author: toad
Date: 2005-11-24 22:07:04 +0000 (Thu, 24 Nov 2005)
New Revision: 7589
Added:
trunk/freenet/src/freenet/client/events/SplitfileProgressEvent.java
Modified:
trunk/freenet/src/freenet/client/RetryTracker.java
trunk/freenet/src/freenet/client/RetryTrackerCallback.java
trunk/freenet/src/freenet/client/Segment.java
trunk/freenet/src/freenet/client/SplitFetcher.java
trunk/freenet/src/freenet/client/SplitInserter.java
trunk/freenet/src/freenet/node/Version.java
Log:
209:
Splitfile progress indicator.
Modified: trunk/freenet/src/freenet/client/RetryTracker.java
===================================================================
--- trunk/freenet/src/freenet/client/RetryTracker.java 2005-11-24 21:41:30 UTC
(rev 7588)
+++ trunk/freenet/src/freenet/client/RetryTracker.java 2005-11-24 22:07:04 UTC
(rev 7589)
@@ -204,6 +204,7 @@
* Otherwise if we are finished, call the callback's finish method.
*/
public synchronized void maybeStart(boolean cantCallFinished) {
+ callback.onProgress();
if(killed) return;
Logger.minor(this, "succeeded: "+succeededBlocks.size()+",
target: "+targetSuccesses+
", running: "+runningBlocks.size()+", levels:
"+levels.size()+"("+curMinLevel+"-"+curMaxLevel+"), finishOnEmpty:
"+finishOnEmpty);
Modified: trunk/freenet/src/freenet/client/RetryTrackerCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/RetryTrackerCallback.java 2005-11-24
21:41:30 UTC (rev 7588)
+++ trunk/freenet/src/freenet/client/RetryTrackerCallback.java 2005-11-24
22:07:04 UTC (rev 7589)
@@ -13,4 +13,9 @@
*/
void finished(SplitfileBlock[] succeeded, SplitfileBlock[] failed,
SplitfileBlock[] fatalErrors);
+ /**
+ * When a block completes etc.
+ */
+ void onProgress();
+
}
Modified: trunk/freenet/src/freenet/client/Segment.java
===================================================================
--- trunk/freenet/src/freenet/client/Segment.java 2005-11-24 21:41:30 UTC
(rev 7588)
+++ trunk/freenet/src/freenet/client/Segment.java 2005-11-24 22:07:04 UTC
(rev 7589)
@@ -249,4 +249,24 @@
// FIXME heal check blocks too
}
+
+ public void onProgress() {
+ parentFetcher.onProgress();
+ }
+
+ public int fetchedBlocks() {
+ return tracker.succeededBlocks().length;
+ }
+
+ public int failedBlocks() {
+ return tracker.failedBlocks().length;
+ }
+
+ public int fatallyFailedBlocks() {
+ return tracker.fatalErrorBlocks().length;
+ }
+
+ public int runningBlocks() {
+ return tracker.runningBlocks().length;
+ }
}
Modified: trunk/freenet/src/freenet/client/SplitFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/SplitFetcher.java 2005-11-24 21:41:30 UTC
(rev 7588)
+++ trunk/freenet/src/freenet/client/SplitFetcher.java 2005-11-24 22:07:04 UTC
(rev 7589)
@@ -7,6 +7,7 @@
import com.onionnetworks.fec.FECCode;
import com.onionnetworks.fec.FECCodeFactory;
+import freenet.client.events.SplitfileProgressEvent;
import freenet.keys.FreenetURI;
import freenet.keys.NodeCHK;
import freenet.support.Bucket;
@@ -232,4 +233,19 @@
}
}
+ public void onProgress() {
+ int totalBlocks = splitfileDataBlocks.length +
splitfileCheckBlocks.length;
+ int fetchedBlocks = 0;
+ int failedBlocks = 0;
+ int fatallyFailedBlocks = 0;
+ int runningBlocks = 0;
+ for(int i=0;i<segments.length;i++) {
+ fetchedBlocks += segments[i].fetchedBlocks();
+ failedBlocks += segments[i].failedBlocks();
+ fatallyFailedBlocks +=
segments[i].fatallyFailedBlocks();
+ runningBlocks += segments[i].runningBlocks();
+ }
+ fctx.eventProducer.produceEvent(new
SplitfileProgressEvent(totalBlocks, fetchedBlocks, failedBlocks,
fatallyFailedBlocks, runningBlocks));
+ }
+
}
Modified: trunk/freenet/src/freenet/client/SplitInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/SplitInserter.java 2005-11-24 21:41:30 UTC
(rev 7588)
+++ trunk/freenet/src/freenet/client/SplitInserter.java 2005-11-24 22:07:04 UTC
(rev 7589)
@@ -4,6 +4,7 @@
import java.util.Vector;
import freenet.client.events.GeneratedURIEvent;
+import freenet.client.events.SplitfileProgressEvent;
import freenet.keys.FreenetURI;
import freenet.keys.NodeCHK;
import freenet.support.Bucket;
@@ -75,7 +76,7 @@
// Backwards, because the last is the shortest
try {
for(int i=segments.length-1;i>=0;i--) {
- countCheckBlocks += encodeSegment(i,
origDataBlocks.length + checkSegmentSize * i);
+ encodeSegment(i, origDataBlocks.length
+ checkSegmentSize * i);
Logger.minor(this, "Encoded segment
"+i+" of "+segments.length);
}
} catch (IOException e) {
@@ -233,7 +234,10 @@
j = i;
for(int x=0;x<seg.length;x++)
if(seg[x].getData() == null) throw new
NullPointerException("In splitIntoSegs: "+x+" is null of "+seg.length+" of
"+segNo);
- segs.add(new InsertSegment(splitfileAlgorithm,
seg, blockSize, ctx.bf, getCHKOnly, segNo));
+ InsertSegment s = new
InsertSegment(splitfileAlgorithm, seg, blockSize, ctx.bf, getCHKOnly, segNo);
+ countCheckBlocks += s.checkBlocks.length;
+ segs.add(s);
+
if(i == dataBlocks) break;
segNo++;
}
@@ -252,4 +256,17 @@
}
}
+ public void onProgress() {
+ /* What info to report?
+ * - Total number of blocks to insert.
+ * -
+ */
+ int totalBlocks = origDataBlocks.length + countCheckBlocks;
+ int fetchedBlocks = tracker.succeededBlocks().length;
+ int failedBlocks = tracker.countFailedBlocks();
+ int fatallyFailedBlocks = tracker.fatalErrorBlocks().length;
+ int runningBlocks = tracker.runningBlocks().length;
+ ctx.eventProducer.produceEvent(new
SplitfileProgressEvent(totalBlocks, fetchedBlocks, failedBlocks,
fatallyFailedBlocks, runningBlocks));
+ }
+
}
Added: trunk/freenet/src/freenet/client/events/SplitfileProgressEvent.java
===================================================================
--- trunk/freenet/src/freenet/client/events/SplitfileProgressEvent.java
2005-11-24 21:41:30 UTC (rev 7588)
+++ trunk/freenet/src/freenet/client/events/SplitfileProgressEvent.java
2005-11-24 22:07:04 UTC (rev 7589)
@@ -0,0 +1,30 @@
+package freenet.client.events;
+
+public class SplitfileProgressEvent implements ClientEvent {
+
+ public static int code = 0x07;
+
+ public final int totalBlocks;
+ public final int fetchedBlocks;
+ public final int failedBlocks;
+ public final int fatallyFailedBlocks;
+ public final int runningBlocks;
+
+ public SplitfileProgressEvent(int totalBlocks, int fetchedBlocks, int
failedBlocks,
+ int fatallyFailedBlocks, int runningBlocks) {
+ this.totalBlocks = totalBlocks;
+ this.fetchedBlocks = fetchedBlocks;
+ this.failedBlocks = failedBlocks;
+ this.fatallyFailedBlocks = fatallyFailedBlocks;
+ this.runningBlocks = runningBlocks;
+ }
+
+ public String getDescription() {
+ return "Completed "+fetchedBlocks+"/"+totalBlocks+" (failed
"+fetchedBlocks+", fatally "+fatallyFailedBlocks+", running "+runningBlocks+")";
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+}
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-24 21:41:30 UTC (rev
7588)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-24 22:07:04 UTC (rev
7589)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 208;
+ public static final int buildNumber = 209;
/** Oldest build of Fred we will talk to */
public static final int lastGoodBuild = 208;