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);
+ }
}