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

Reply via email to