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