Author: toad
Date: 2008-06-19 15:16:03 +0000 (Thu, 19 Jun 2008)
New Revision: 20490
Modified:
branches/db4o/freenet/src/freenet/client/FECCallback.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
Log:
Add FECCallback.onFailed().
If a callback throws, feed it to onFailed(), and commit anyway, so we always
delete the FECJob, even if it throws... so we don't end up with the same error
on every startup.
Modified: branches/db4o/freenet/src/freenet/client/FECCallback.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/FECCallback.java 2008-06-19
15:11:46 UTC (rev 20489)
+++ branches/db4o/freenet/src/freenet/client/FECCallback.java 2008-06-19
15:16:03 UTC (rev 20490)
@@ -19,4 +19,7 @@
public void onEncodedSegment(ObjectContainer container, ClientContext
context);
public void onDecodedSegment(ObjectContainer container, ClientContext
context);
+
+ /** Something broke. */
+ public void onFailed(Throwable t, ObjectContainer container,
ClientContext context);
}
\ No newline at end of file
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-06-19 15:11:46 UTC (rev 20489)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-06-19 15:16:03 UTC (rev 20490)
@@ -692,4 +692,15 @@
checkCooldownTimes[blockNo -
dataCooldownTimes.length] = -1;
}
}
+
+ public void onFailed(Throwable t, ObjectContainer container,
ClientContext context) {
+ synchronized(this) {
+ if(finished) {
+ Logger.error(this, "FEC decode or encode failed
but already finished: "+t, t);
+ return;
+ }
+ finished = true;
+ }
+ this.fail(new FetchException(FetchException.INTERNAL_ERROR,
"FEC failure: "+t, t), container, context);
+ }
}
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2008-06-19 15:11:46 UTC (rev 20489)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2008-06-19 15:16:03 UTC (rev 20490)
@@ -679,6 +679,10 @@
if (toThrow != null)
toThrow = new
InsertException(InsertException.CANCELLED);
}
+ cancelInner(container, context);
+ }
+
+ private void cancelInner(ObjectContainer container, ClientContext
context) {
for (int i = 0; i < dataBlockInserters.length; i++) {
SingleBlockInserter sbi = dataBlockInserters[i];
if (sbi != null)
@@ -737,4 +741,17 @@
context.backgroundBlockEncoder.queue(dataBlockInserters,
container, context);
context.backgroundBlockEncoder.queue(checkBlockInserters,
container, context);
}
+
+ public void onFailed(Throwable t, ObjectContainer container,
ClientContext context) {
+ synchronized(this) {
+ if(finished) {
+ Logger.error(this, "FEC decode or encode failed
but already finished: "+t, t);
+ return;
+ }
+ finished = true;
+ Logger.error(this, "Insert segment failed: "+t+" for
"+this, t);
+ this.toThrow = new
InsertException(InsertException.INTERNAL_ERROR, "FEC failure: "+t, null);
+ }
+ cancelInner(container, context);
+ }
}