Author: toad
Date: 2009-01-24 20:11:05 +0000 (Sat, 24 Jan 2009)
New Revision: 25293
Modified:
branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
Log:
Optimise the common case
Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
2009-01-24 20:02:46 UTC (rev 25292)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
2009-01-24 20:11:05 UTC (rev 25293)
@@ -30,6 +30,7 @@
import freenet.support.io.BucketTools;
import freenet.support.io.NativeThread;
import freenet.support.io.NotPersistentBucket;
+import freenet.support.io.SegmentedBucketChainBucket;
/**
* Attempt to insert a file. May include metadata.
@@ -249,11 +250,23 @@
if (fitsInOneCHK) {
// Insert single block, then insert pointer to it
if(persistent && !(data instanceof
NotPersistentBucket)) {
+ boolean skip = false;
+ if(data instanceof SegmentedBucketChainBucket) {
+ SegmentedBucketChainBucket seg =
(SegmentedBucketChainBucket) data;
+ Bucket[] buckets = seg.getBuckets();
+ if(buckets.length == 1) {
+ seg.clear();
+ data = buckets[0];
+ skip = true;
+ }
+ }
try {
+ if(!skip) {
Bucket newData =
context.persistentBucketFactory.makeBucket(data.size());
BucketTools.copy(data, newData);
data.free();
data = newData;
+ }
} catch (IOException e) {
Logger.error(this, "Caught "+e+" while
copying non-persistent data", e);
throw new
InsertException(InsertException.BUCKET_ERROR, e, null);
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
===================================================================
---
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
2009-01-24 20:02:46 UTC (rev 25292)
+++
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
2009-01-24 20:11:05 UTC (rev 25293)
@@ -409,7 +409,7 @@
return buckets;
}
- synchronized void clear() {
+ public synchronized void clear() {
dbJobRunner.runBlocking(new DBJob() {
public void run(ObjectContainer container,
ClientContext context) {
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs