Author: toad
Date: 2009-02-17 16:30:15 +0000 (Tue, 17 Feb 2009)
New Revision: 25668

Modified:
   
branches/db4o/freenet/src/freenet/support/io/PersistentBlobTempBucketFactory.java
   branches/db4o/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
   
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucketKillJob.java
Log:
Free blobs code fixes


Modified: 
branches/db4o/freenet/src/freenet/support/io/PersistentBlobTempBucketFactory.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/support/io/PersistentBlobTempBucketFactory.java
   2009-02-17 16:29:41 UTC (rev 25667)
+++ 
branches/db4o/freenet/src/freenet/support/io/PersistentBlobTempBucketFactory.java
   2009-02-17 16:30:15 UTC (rev 25668)
@@ -42,7 +42,7 @@
        public final long blockSize;
        private File storageFile;
        private transient RandomAccessFile raf;
-       private transient LinkedList<DBJob> freeJobs;
+       private transient HashSet<DBJob> freeJobs;
        /** We use NIO for the equivalent of pwrite/pread. This is parallelized 
on unix
         * but sadly not on Windows. */
        transient FileChannel channel;
@@ -95,7 +95,7 @@
                shadows = new TreeMap<Long,PersistentBlobTempBucket>();
                jobRunner = jobRunner2;
                weakRandomSource = fastWeakRandom;
-               freeJobs = new LinkedList<DBJob>();
+               freeJobs = new HashSet<DBJob>();
                this.ticker = ticker;
                
                // Diagnostics
@@ -169,6 +169,8 @@
        private final DBJob slotFinder = new DBJob() {
                
                public void run(ObjectContainer container, ClientContext 
context) {
+                       int added = 0;
+                       
                        while(true) {
                        boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
                        synchronized(PersistentBlobTempBucketFactory.this) {
@@ -185,8 +187,6 @@
                        long blocks = size / blockSize;
                        long ptr = blocks - 1;
 
-                       int added = 0;
-                       
                        for(long l = 0; l < blockSize + 16383; l += 16384) {
                        Query query = container.query();
                        query.constrain(PersistentBlobTempBucketTag.class);
@@ -264,12 +264,15 @@
                        
                        DBJob freeJob = null;
                        synchronized(this) {
-                               if(!freeJobs.isEmpty())
-                                       freeJob = freeJobs.removeFirst();
+                               if(!freeJobs.isEmpty()) {
+                                       freeJob = freeJobs.iterator().next();
+                                       freeJobs.remove(freeJob);
+                               }
                        }
                        if(freeJob != null) {
                                container.activate(freeJob, 1);
                                System.err.println("Freeing some space by 
running "+freeJob);
+                               Logger.minor(this, "Freeing some space by 
running "+freeJob);
                                freeJob.run(container, context);
                                continue;
                        }
@@ -628,4 +631,10 @@
                }
        }
 
+       public void removeBlobFreeCallback(DBJob job) {
+               synchronized(this) {
+                       freeJobs.remove(job);
+               }
+       }
+
 }

Modified: 
branches/db4o/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/support/io/PersistentTempBucketFactory.java   
    2009-02-17 16:29:41 UTC (rev 25667)
+++ 
branches/db4o/freenet/src/freenet/support/io/PersistentTempBucketFactory.java   
    2009-02-17 16:30:15 UTC (rev 25668)
@@ -250,4 +250,8 @@
        public void addBlobFreeCallback(DBJob job) {
                blobFactory.addBlobFreeCallback(job);
        }
+
+       public void removeBlobFreeCallback(DBJob job) {
+               blobFactory.removeBlobFreeCallback(job);
+       }
 }

Modified: 
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucketKillJob.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucketKillJob.java
 2009-02-17 16:29:41 UTC (rev 25667)
+++ 
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucketKillJob.java
 2009-02-17 16:30:15 UTC (rev 25668)
@@ -31,6 +31,7 @@
                } else {
                        context.jobRunner.removeRestartJob(this, RESTART_PRIO, 
container);
                        container.delete(this);
+                       
context.persistentBucketFactory.removeBlobFreeCallback(this);
                }
        }
        

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

Reply via email to