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

Reply via email to