Author: toad
Date: 2009-03-27 19:04:26 +0000 (Fri, 27 Mar 2009)
New Revision: 26245
Modified:
branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java
branches/db4o/freenet/src/freenet/support/io/FileBucket.java
branches/db4o/freenet/src/freenet/support/io/PersistentTempFileBucket.java
branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java
branches/db4o/freenet/test/freenet/support/io/PaddedEphemerallyEncryptedBucketTest.java
branches/db4o/freenet/test/freenet/support/io/TempFileBucketTest.java
Log:
Move deleteOnExit handling into BaseFileBucket: pass a boolean in and set
deleteOnExit() if it is true.
Pass it in through a protected constructor on TempFileBucket.
Do not store deleteOnExit in TempFileBucket, it is always true for a
TempFileBucket and must be overridden by descendants, who must use the
protected constructor, pass it in there, and override createShadow().
Do all of these things for PersistentTempFileBucket.
Fix test compiling for these changes.
Modified: branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java
2009-03-27 18:54:01 UTC (rev 26244)
+++ branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java
2009-03-27 19:04:26 UTC (rev 26245)
@@ -46,9 +46,11 @@
protected static String tempDir = null;
- public BaseFileBucket(File file) {
+ public BaseFileBucket(File file, boolean deleteOnExit) {
if(file == null) throw new NullPointerException();
this.length = file.length();
+ if(deleteOnExit)
+ file.deleteOnExit();
}
protected void setDeleteOnExit(File file) {
Modified: branches/db4o/freenet/src/freenet/support/io/FileBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/FileBucket.java
2009-03-27 18:54:01 UTC (rev 26244)
+++ branches/db4o/freenet/src/freenet/support/io/FileBucket.java
2009-03-27 19:04:26 UTC (rev 26245)
@@ -43,7 +43,7 @@
* @param deleteOnExit If true, delete the file on a clean exit of the
JVM. Irreversible - use with care!
*/
public FileBucket(File file, boolean readOnly, boolean createFileOnly,
boolean deleteOnFinalize, boolean deleteOnExit, boolean deleteOnFree) {
- super(file);
+ super(file, deleteOnExit);
if(file == null) throw new NullPointerException();
File origFile = file;
file = file.getAbsoluteFile();
@@ -56,8 +56,6 @@
this.deleteOnFinalize = deleteOnFinalize;
this.deleteOnFree = deleteOnFree;
this.deleteOnExit = deleteOnExit;
- if(deleteOnExit)
- setDeleteOnExit(file);
// Useful for finding temp file leaks.
// System.err.println("-- FileBucket.ctr(0) -- " +
// file.getAbsolutePath());
Modified:
branches/db4o/freenet/src/freenet/support/io/PersistentTempFileBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/PersistentTempFileBucket.java
2009-03-27 18:54:01 UTC (rev 26244)
+++ branches/db4o/freenet/src/freenet/support/io/PersistentTempFileBucket.java
2009-03-27 19:04:26 UTC (rev 26245)
@@ -1,15 +1,21 @@
package freenet.support.io;
import java.io.File;
+import java.io.IOException;
+import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
import freenet.support.api.Bucket;
public class PersistentTempFileBucket extends TempFileBucket {
- protected PersistentTempFileBucket(long id, FilenameGenerator
generator) {
- super(id, generator, false, true);
+ public PersistentTempFileBucket(long id, FilenameGenerator generator) {
+ this(id, generator, true);
}
+
+ protected PersistentTempFileBucket(long id, FilenameGenerator
generator, boolean deleteOnFree) {
+ super(id, generator, false, deleteOnFree);
+ }
@Override
protected boolean deleteOnFinalize() {
@@ -40,7 +46,7 @@
} catch (NumberFormatException e) {
throw new CannotCreateFromFieldSetException("Corrupt
length "+tmp, e);
}
- Bucket bucket = new PersistentTempFileBucket(id,
f.getGenerator());
+ Bucket bucket = new PersistentTempFileBucket(id,
f.getGenerator(), true);
if(file.exists()) // no point otherwise!
f.register(file);
return bucket;
@@ -55,4 +61,14 @@
return fs;
}
+ /** Must override createShadow() so it creates a persistent bucket,
which will have
+ * deleteOnExit() = deleteOnFinalize() = false.
+ */
+ public Bucket createShadow() throws IOException {
+ PersistentTempFileBucket ret = new
PersistentTempFileBucket(filenameID, generator, false);
+ ret.setReadOnly();
+ if(!getFile().exists()) Logger.error(this, "File does not exist
when creating shadow: "+getFile());
+ return ret;
+ }
+
}
Modified: branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java
2009-03-27 18:54:01 UTC (rev 26244)
+++ branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java
2009-03-27 19:04:26 UTC (rev 26245)
@@ -24,20 +24,26 @@
final FilenameGenerator generator;
private static boolean logDebug = true;
private boolean readOnly;
- private final boolean deleteOnExit;
private final boolean deleteOnFree;
+
+ public TempFileBucket(long id, FilenameGenerator generator) {
+ this(id, generator, true, true);
+ }
+
/**
* Constructor for the TempFileBucket object
- *
- * @param f File
+ * Subclasses can call this constructor.
+ * @param deleteOnExit Set if you want the bucket deleted on shutdown.
Passed to
+ * the parent BaseFileBucket. You must also override deleteOnExit() and
+ * implement your own createShadow()!
+ * @param deleteOnFree True for a normal temp bucket, false for a
shadow.
*/
- public TempFileBucket(
+ protected TempFileBucket(
long id,
FilenameGenerator generator, boolean deleteOnExit, boolean
deleteOnFree) {
- super(generator.getFilename(id));
+ super(generator.getFilename(id), deleteOnExit);
this.filenameID = id;
this.generator = generator;
- this.deleteOnExit = deleteOnExit;
this.deleteOnFree = deleteOnFree;
synchronized(this) {
logDebug = Logger.shouldLog(Logger.DEBUG, this);
@@ -59,7 +65,7 @@
protected boolean deleteOnFinalize() {
// Make sure finalize wacks temp file
// if it is not explictly freed.
- return deleteOnExit; // not if shadow
+ return true; // not if shadow
}
@Override
@@ -95,7 +101,7 @@
@Override
protected boolean deleteOnExit() {
- return deleteOnExit;
+ return true;
}
public void storeTo(ObjectContainer container) {
@@ -111,7 +117,7 @@
}
public Bucket createShadow() throws IOException {
- TempFileBucket ret = new TempFileBucket(filenameID, generator,
deleteOnExit, false);
+ TempFileBucket ret = new TempFileBucket(filenameID, generator,
true, false);
ret.setReadOnly();
if(!getFile().exists()) Logger.error(this, "File does not exist
when creating shadow: "+getFile());
return ret;
Modified:
branches/db4o/freenet/test/freenet/support/io/PaddedEphemerallyEncryptedBucketTest.java
===================================================================
---
branches/db4o/freenet/test/freenet/support/io/PaddedEphemerallyEncryptedBucketTest.java
2009-03-27 18:54:01 UTC (rev 26244)
+++
branches/db4o/freenet/test/freenet/support/io/PaddedEphemerallyEncryptedBucketTest.java
2009-03-27 19:04:26 UTC (rev 26245)
@@ -17,7 +17,7 @@
@Override
protected Bucket makeBucket(long size) throws IOException {
FilenameGenerator filenameGenerator = new
FilenameGenerator(weakPRNG, false, null, "junit");
- TempFileBucket fileBucket = new
TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator, true);
+ TempFileBucket fileBucket = new
TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator);
return new PaddedEphemerallyEncryptedBucket(fileBucket, 1024,
strongPRNG, weakPRNG);
}
Modified: branches/db4o/freenet/test/freenet/support/io/TempFileBucketTest.java
===================================================================
--- branches/db4o/freenet/test/freenet/support/io/TempFileBucketTest.java
2009-03-27 18:54:01 UTC (rev 26244)
+++ branches/db4o/freenet/test/freenet/support/io/TempFileBucketTest.java
2009-03-27 19:04:26 UTC (rev 26245)
@@ -15,7 +15,7 @@
@Override
protected Bucket makeBucket(long size) throws IOException {
FilenameGenerator filenameGenerator = new
FilenameGenerator(weakPRNG, false, null, "junit");
- BaseFileBucket bfb = new
TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator, true);
+ BaseFileBucket bfb = new
TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator);
assertTrue("deleteOnExit", bfb.deleteOnExit());
assertTrue("deleteOnFree", bfb.deleteOnFree());
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs