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;


Reply via email to