Author: toad
Date: 2008-06-19 19:36:33 +0000 (Thu, 19 Jun 2008)
New Revision: 20501

Modified:
   branches/db4o/freenet/src/freenet/support/SimpleReadOnlyArrayBucket.java
   branches/db4o/freenet/src/freenet/support/api/Bucket.java
   branches/db4o/freenet/src/freenet/support/io/ArrayBucket.java
   branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java
   branches/db4o/freenet/src/freenet/support/io/BucketChainBucket.java
   branches/db4o/freenet/src/freenet/support/io/DelayedFreeBucket.java
   branches/db4o/freenet/src/freenet/support/io/FileBucket.java
   branches/db4o/freenet/src/freenet/support/io/MultiReaderBucket.java
   branches/db4o/freenet/src/freenet/support/io/NullBucket.java
   
branches/db4o/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
   branches/db4o/freenet/src/freenet/support/io/ReadOnlyFileSliceBucket.java
   branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java
Log:
Bucket.storeTo(): reliably store and update a bucket and all its dependancies.
Not doing this implicitly because bucket access may not be on the DB thread.

Modified: 
branches/db4o/freenet/src/freenet/support/SimpleReadOnlyArrayBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/SimpleReadOnlyArrayBucket.java    
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/SimpleReadOnlyArrayBucket.java    
2008-06-19 19:36:33 UTC (rev 20501)
@@ -5,6 +5,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;

+import com.db4o.ObjectContainer;
+
 import freenet.support.api.Bucket;

 /**
@@ -57,4 +59,8 @@
                // Do nothing
        }

+       public void storeTo(ObjectContainer container) {
+               container.set(this);
+       }
+
 }

Modified: branches/db4o/freenet/src/freenet/support/api/Bucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/api/Bucket.java   2008-06-19 
18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/api/Bucket.java   2008-06-19 
19:36:33 UTC (rev 20501)
@@ -3,6 +3,8 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.support.api;
 import java.io.*;
+
+import com.db4o.ObjectContainer;
 /**
  * A bucket is any arbitrary object can temporarily store data.
  * 
@@ -49,5 +51,11 @@
      * Free the bucket, if supported.
      */
        public void free();
+       
+       /**
+        * Write the bucket and all its dependancies to the database.
+        * Update the stored copy and its dependancies if necessary.
+        */
+       public void storeTo(ObjectContainer container);

 }

Modified: branches/db4o/freenet/src/freenet/support/io/ArrayBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/ArrayBucket.java       
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/ArrayBucket.java       
2008-06-19 19:36:33 UTC (rev 20501)
@@ -8,6 +8,8 @@
 import java.util.ArrayList;
 import java.util.Iterator;

+import com.db4o.ObjectContainer;
+
 import freenet.support.api.Bucket;

 /**
@@ -186,4 +188,8 @@
                        throw new IllegalStateException();
                return buf;
        }
+
+       public void storeTo(ObjectContainer container) {
+               container.set(this);
+       }
 }

Modified: branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java    
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java    
2008-06-19 19:36:33 UTC (rev 20501)
@@ -28,7 +28,7 @@
        /** Vector of streams (FileBucketInputStream or FileBucketOutputStream) 
which 
         * are open to this file. So we can be sure they are all closed when we 
free it. 
         * Can be null. */
-       private Vector streams;
+       private transient Vector streams;

        protected static String tempDir = null;


Modified: branches/db4o/freenet/src/freenet/support/io/BucketChainBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/BucketChainBucket.java 
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/BucketChainBucket.java 
2008-06-19 19:36:33 UTC (rev 20501)
@@ -9,6 +9,8 @@
 import java.io.OutputStream;
 import java.util.Vector;

+import com.db4o.ObjectContainer;
+
 import freenet.support.api.Bucket;
 import freenet.support.api.BucketFactory;

@@ -259,4 +261,9 @@
                return size;
        }

+       public void storeTo(ObjectContainer container) {
+               // I'm not sure it's safe to serialize the BucketFactory ...
+               throw new UnsupportedOperationException();
+       }
+
 }

Modified: branches/db4o/freenet/src/freenet/support/io/DelayedFreeBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/DelayedFreeBucket.java 
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/DelayedFreeBucket.java 
2008-06-19 19:36:33 UTC (rev 20501)
@@ -9,6 +9,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;

+import com.db4o.ObjectContainer;
+
 import freenet.crypt.RandomSource;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
@@ -88,4 +90,8 @@
                return fs;
        }

+       public void storeTo(ObjectContainer container) {
+               container.set(this);
+       }
+
 }
\ No newline at end of file

Modified: branches/db4o/freenet/src/freenet/support/io/FileBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/FileBucket.java        
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/FileBucket.java        
2008-06-19 19:36:33 UTC (rev 20501)
@@ -5,6 +5,8 @@

 import java.io.File;

+import com.db4o.ObjectContainer;
+
 import freenet.support.api.Bucket;

 /**
@@ -96,4 +98,8 @@
        protected boolean deleteOnFree() {
                return deleteOnFree;
        }
+
+       public void storeTo(ObjectContainer container) {
+               container.set(this);
+       }
 }

Modified: branches/db4o/freenet/src/freenet/support/io/MultiReaderBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/MultiReaderBucket.java 
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/MultiReaderBucket.java 
2008-06-19 19:36:33 UTC (rev 20501)
@@ -8,6 +8,8 @@
 import java.io.OutputStream;
 import java.util.ArrayList;

+import com.db4o.ObjectContainer;
+
 import freenet.support.api.Bucket;

 /**
@@ -123,6 +125,10 @@
                protected void finalize() {
                        free();
                }
+
+               public void storeTo(ObjectContainer container) {
+                       container.set(this);
+               }

        }


Modified: branches/db4o/freenet/src/freenet/support/io/NullBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/NullBucket.java        
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/NullBucket.java        
2008-06-19 19:36:33 UTC (rev 20501)
@@ -5,6 +5,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;

+import com.db4o.ObjectContainer;
+
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;

@@ -70,5 +72,9 @@
                fs.putSingle("Type", "NullBucket");
                return fs;
        }
+
+       public void storeTo(ObjectContainer container) {
+               container.set(this);
+       }
 }


Modified: 
branches/db4o/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
  2008-06-19 18:49:58 UTC (rev 20500)
+++ 
branches/db4o/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
  2008-06-19 19:36:33 UTC (rev 20501)
@@ -18,6 +18,8 @@
 import freenet.support.api.Bucket;
 import java.util.Random;

+import com.db4o.ObjectContainer;
+
 /**
  * A proxy Bucket which adds:
  * - Encryption with the supplied cipher, and a random, ephemeral key.
@@ -364,4 +366,9 @@
                return fs;
        }

+       public void storeTo(ObjectContainer container) {
+               container.set(bucket);
+               container.set(this);
+       }
+
 }

Modified: 
branches/db4o/freenet/src/freenet/support/io/ReadOnlyFileSliceBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/ReadOnlyFileSliceBucket.java   
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/ReadOnlyFileSliceBucket.java   
2008-06-19 19:36:33 UTC (rev 20501)
@@ -10,6 +10,8 @@
 import java.io.OutputStream;
 import java.io.RandomAccessFile;

+import com.db4o.ObjectContainer;
+
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;

@@ -144,4 +146,8 @@
                fs.put("Length", length);
                return fs;
        }
+
+       public void storeTo(ObjectContainer container) {
+               container.set(this);
+       }
 }

Modified: branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java    
2008-06-19 18:49:58 UTC (rev 20500)
+++ branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java    
2008-06-19 19:36:33 UTC (rev 20501)
@@ -2,6 +2,8 @@

 import java.io.File;

+import com.db4o.ObjectContainer;
+
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;
@@ -82,4 +84,9 @@
        protected boolean deleteOnExit() {
                return true;
        }
+
+       public void storeTo(ObjectContainer container) {
+               container.set(generator);
+               container.set(this);
+       }
 }


Reply via email to