Author: toad
Date: 2008-06-25 15:20:27 +0000 (Wed, 25 Jun 2008)
New Revision: 20690
Modified:
branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
Log:
Insertion:
Activation.
SplitFileInserter.persistent.
SingleFileFetcher.started: don't start more than once.
Database updating.
Paranoia.
Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
2008-06-25 15:17:53 UTC (rev 20689)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
2008-06-25 15:20:27 UTC (rev 20690)
@@ -53,6 +53,7 @@
private final String targetFilename;
private final boolean earlyEncode;
private final boolean persistent;
+ private boolean started;
/**
* @param parent
@@ -113,6 +114,10 @@
}
void onCompressed(CompressionOutput output, ObjectContainer container,
ClientContext context) {
+ if(started) {
+ Logger.error(this, "Already started, not starting
again", new Exception("error"));
+ return;
+ }
try {
onCompressedInner(output, container, context);
} catch (InsertException e) {
@@ -132,6 +137,9 @@
}
void onCompressedInner(CompressionOutput output, ObjectContainer
container, ClientContext context) throws InsertException {
+ if(container != null) {
+ container.activate(block, 2);
+ }
long origSize = block.getData().size();
Bucket bestCompressedData = output.data;
Bucket data = bestCompressedData;
@@ -183,6 +191,9 @@
cb.onTransition(this, bi, container);
bi.schedule(container, context);
cb.onBlockSetFinished(this, container, context);
+ started = true;
+ if(persistent)
+ container.set(this);
return;
}
}
@@ -223,6 +234,9 @@
metaPutter.schedule(container, context);
cb.onBlockSetFinished(this, container, context);
}
+ started = true;
+ if(persistent)
+ container.set(this);
return;
}
// Otherwise the file is too big to fit into one block
@@ -231,18 +245,21 @@
// insert it. Then when the splitinserter has finished, and the
// metadata insert has finished too, tell the master callback.
if(reportMetadataOnly) {
- SplitFileInserter sfi = new SplitFileInserter(parent,
cb, data, bestCodec, origSize, block.clientMetadata, ctx, getCHKOnly, metadata,
token, insertAsArchiveManifest, freeData, container, context);
+ SplitFileInserter sfi = new SplitFileInserter(parent,
cb, data, bestCodec, origSize, block.clientMetadata, ctx, getCHKOnly, metadata,
token, insertAsArchiveManifest, freeData, persistent, container, context);
cb.onTransition(this, sfi, container);
sfi.start(container, context);
if(earlyEncode) sfi.forceEncode(container, context);
} else {
SplitHandler sh = new SplitHandler();
- SplitFileInserter sfi = new SplitFileInserter(parent,
sh, data, bestCodec, origSize, block.clientMetadata, ctx, getCHKOnly, metadata,
token, insertAsArchiveManifest, freeData, container, context);
+ SplitFileInserter sfi = new SplitFileInserter(parent,
sh, data, bestCodec, origSize, block.clientMetadata, ctx, getCHKOnly, metadata,
token, insertAsArchiveManifest, freeData, persistent, container, context);
sh.sfi = sfi;
cb.onTransition(this, sh, container);
sfi.start(container, context);
if(earlyEncode) sfi.forceEncode(container, context);
}
+ started = true;
+ if(persistent)
+ container.set(this);
}
private void tryCompress(ObjectContainer container, ClientContext
context) throws InsertException {
@@ -707,10 +724,14 @@
return null;
}
- public void onStartCompression(int i, ObjectContainer container,
ClientContext context) {
- if(persistent)
+ public void onStartCompression(final int i, ObjectContainer container,
ClientContext context) {
+ if(persistent) {
container.activate(ctx, 2);
- if(parent == cb)
+ }
+ if(parent == cb) {
+ if(ctx == null) throw new NullPointerException();
+ if(ctx.eventProducer == null) throw new
NullPointerException();
ctx.eventProducer.produceEvent(new
StartedCompressionEvent(i), container, context);
+ }
}
}
Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
2008-06-25 15:17:53 UTC (rev 20689)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
2008-06-25 15:20:27 UTC (rev 20690)
@@ -47,6 +47,7 @@
final boolean insertAsArchiveManifest;
private boolean forceEncode;
private final long decompressedLength;
+ final boolean persistent;
public SimpleFieldSet getProgressFieldset() {
SimpleFieldSet fs = new SimpleFieldSet(false);
@@ -69,7 +70,7 @@
return fs;
}
- public SplitFileInserter(BaseClientPutter put, PutCompletionCallback
cb, Bucket data, Compressor bestCodec, long decompressedLength, ClientMetadata
clientMetadata, InsertContext ctx, boolean getCHKOnly, boolean isMetadata,
Object token, boolean insertAsArchiveManifest, boolean freeData,
ObjectContainer container, ClientContext context) throws InsertException {
+ public SplitFileInserter(BaseClientPutter put, PutCompletionCallback
cb, Bucket data, Compressor bestCodec, long decompressedLength, ClientMetadata
clientMetadata, InsertContext ctx, boolean getCHKOnly, boolean isMetadata,
Object token, boolean insertAsArchiveManifest, boolean freeData, boolean
persistent, ObjectContainer container, ClientContext context) throws
InsertException {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
this.parent = put;
this.insertAsArchiveManifest = insertAsArchiveManifest;
@@ -98,6 +99,11 @@
segmentSize = ctx.splitfileSegmentDataBlocks;
checkSegmentSize = splitfileAlgorithm ==
Metadata.SPLITFILE_NONREDUNDANT ? 0 : ctx.splitfileSegmentCheckBlocks;
+ this.persistent = persistent;
+ if(persistent) {
+ container.activate(parent, 1);
+ }
+
// Create segments
segments = splitIntoSegments(segmentSize, dataBuckets,
context.mainExecutor, container, context);
int count = 0;
@@ -119,6 +125,7 @@
this.getCHKOnly = getCHKOnly;
this.cb = cb;
this.ctx = ctx;
+ this.persistent = parent.persistent();
// Don't read finished, wait for the segmentFinished()'s.
String length = fs.get("DataLength");
if(length == null) throw new ResumeException("No DataLength");
@@ -241,7 +248,9 @@
}
public void encodedSegment(SplitFileInserterSegment segment,
ObjectContainer container, ClientContext context) {
- container.activate(this, 1);
+ if(persistent) {
+ container.activate(this, 1);
+ }
if(logMINOR) Logger.minor(this, "Encoded segment
"+segment.segNo+" of "+this);
boolean ret = false;
boolean encode;
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2008-06-25 15:17:53 UTC (rev 20689)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2008-06-25 15:20:27 UTC (rev 20690)
@@ -397,6 +397,8 @@
}
public void start(ObjectContainer container, ClientContext context)
throws InsertException {
+ if(parent.persistent)
+ container.activate(parent.parent, 1);
if (logMINOR)
Logger.minor(this, "Starting segment " + segNo + " of "
+ parent
+ " (" + parent.dataLength + "): " +
this + " ( finished="
@@ -429,7 +431,7 @@
// Encode blocks
synchronized(this) {
if(!encoded){
- splitfileAlgo.addToQueue(new
FECJob(splitfileAlgo, context.fecQueue, dataBlocks, checkBlocks,
CHKBlock.DATA_LENGTH, blockInsertContext.persistentBucketFactory, this, false,
parent.parent.getPriorityClass(), parent.parent.persistent()),
context.fecQueue, container);
+ splitfileAlgo.addToQueue(new
FECJob(splitfileAlgo, context.fecQueue, dataBlocks, checkBlocks,
CHKBlock.DATA_LENGTH, blockInsertContext.persistentBucketFactory, this, false,
parent.parent.getPriorityClass(), parent.persistent), context.fecQueue,
container);
}
}
fin = false;
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs