Author: toad
Date: 2009-01-29 00:11:09 +0000 (Thu, 29 Jan 2009)
New Revision: 25360

Modified:
   branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
Log:
Factor out fixNotPersistent(), use it in the no-metadata case as well, fix an 
EOFException.


Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2009-01-29 00:03:29 UTC (rev 25359)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2009-01-29 00:11:09 UTC (rev 25360)
@@ -230,6 +230,7 @@
                boolean noMetadata = ((block.clientMetadata == null) || 
block.clientMetadata.isTrivial()) && targetFilename == null;
                if(noMetadata && archiveType == null) {
                        if(fitsInOneBlockAsIs) {
+                               data = fixNotPersistent(data, context);
                                // Just insert it
                                ClientPutState bi =
                                        createInserter(parent, data, 
codecNumber, block.desiredURI, ctx, cb, metadata, (int)block.getData().size(), 
-1, getCHKOnly, true, true, container, context, freeData);
@@ -250,31 +251,7 @@
                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;
-                                               if(logMINOR) Logger.minor(this, 
"Using bucket 0 of SegmentedBucketChainBucket");
-                                       }
-                               }
-                               try {
-                                       if(!skip) {
-                                       if(logMINOR) Logger.minor(this, 
"Copying data from "+data+" length "+data.size());
-                                       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);
-                               }
-                               // Note that SegmentedBCB *does* support 
splitting, so we don't need to do anything to the data
-                               // if it doesn't fit in a single block.
+                               data = fixNotPersistent(data, context);
                        }
                        if(reportMetadataOnly) {
                                SingleBlockInserter dataPutter = new 
SingleBlockInserter(parent, data, codecNumber, FreenetURI.EMPTY_CHK_URI, ctx, 
cb, metadata, (int)origSize, -1, getCHKOnly, true, true, token, container, 
context, persistent, freeData);
@@ -365,6 +342,35 @@
                }
        }
        
+       private Bucket fixNotPersistent(Bucket data, ClientContext context) 
throws InsertException {
+               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;
+                               if(logMINOR) Logger.minor(this, "Using bucket 0 
of SegmentedBucketChainBucket");
+                       }
+               }
+               try {
+                       if(!skip) {
+                       if(logMINOR) Logger.minor(this, "Copying data from 
"+data+" length "+data.size());
+                       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);
+               }
+               // Note that SegmentedBCB *does* support splitting, so we don't 
need to do anything to the data
+               // if it doesn't fit in a single block.
+               return data;
+       }
+
        private void tryCompress(ObjectContainer container, ClientContext 
context) throws InsertException {
                // First, determine how small it needs to be
                Bucket origData = block.getData();

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to