Author: j16sdiz Date: 2008-07-01 08:09:13 +0000 (Tue, 01 Jul 2008) New Revision: 20887
Modified:
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
Log:
don't write not-modified entry
Modified:
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
2008-07-01 07:36:20 UTC (rev 20886)
+++
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
2008-07-01 08:09:13 UTC (rev 20887)
@@ -434,6 +434,9 @@
isEncrypted = true;
}
+ private Entry() {
+ }
+
public ByteBuffer toByteBuffer() {
ByteBuffer out = ByteBuffer.allocate((int)
entryTotalLength);
encrypt();
@@ -863,8 +866,11 @@
private static Lock cleanerGlobalLock = new ReentrantLock(); // global
across all datastore
private Cleaner cleanerThread;
- private interface BatchProcessor {
+ private final Entry NOT_MODIFIED = new Entry();
+
+ private interface BatchProcessor {
// return <code>null</code> to free the entry
+ // return NOT_MODIFIED to keep the old entry
Entry processs(Entry entry);
}
@@ -955,7 +961,7 @@
batchReadEntries(curOffset,
RESIZE_MEMORY_ENTRIES, new BatchProcessor() {
public Entry processs(Entry entry) {
if (entry.getStoreSize() ==
storeSize) // new size
- return entry;
+ return NOT_MODIFIED;
oldEntryList.add(entry);
return null;
@@ -1026,8 +1032,11 @@
if (entry.getGeneration() !=
generation) {
bloomFilter.updateFilter(entry.getDigestedRoutingKey());
keyCount.incrementAndGet();
+
+
entry.setGeneration(generation);
+ return entry;
}
- return entry;
+ return NOT_MODIFIED;
}
});
@@ -1113,12 +1122,7 @@
continue; //
not occupied
Entry newEntry =
processor.processs(entry);
- if (newEntry != null) {
- // write back
-
buf.position((int) (j * entryTotalLength));
-
buf.put(newEntry.toByteBuffer());
- dirty = true;
- } else { // free the
offset
+ if (newEntry == null)
{// free the offset
try {
freeOffset(entry.curOffset);
keyCount.decrementAndGet();
@@ -1126,7 +1130,13 @@
if
(!shutdown)
Logger.error(this, "error freeing entry " + entry.curOffset, ioe);
}
- }
+ } else if (newEntry ==
NOT_MODIFIED) {
+ } else {
+ // write back
+
buf.position((int) (j * entryTotalLength));
+
buf.put(newEntry.toByteBuffer());
+ dirty = true;
+ }
}
} finally {
// write back.
