Author: j16sdiz
Date: 2008-07-01 14:36:00 +0000 (Tue, 01 Jul 2008)
New Revision: 20911

Modified:
   
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
Log:
resizeStore/rebuildBloom in one go

Modified: 
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java  
    2008-07-01 14:35:13 UTC (rev 20910)
+++ 
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java  
    2008-07-01 14:36:00 UTC (rev 20911)
@@ -961,20 +961,37 @@

                        initOldEntriesFile();

+                       configLock.writeLock().lock();
+                       try {
+                               generation++;
+                               bloomFilter.fork();
+                               keyCount.set(0);
+                       } finally {
+                               configLock.writeLock().unlock();
+                       }
+                       
                        final List<Entry> oldEntryList = new 
LinkedList<Entry>();

                        // start from end of store, make store shrinking 
quicker 
                        long startOffset = (_prevStoreSize / 
RESIZE_MEMORY_ENTRIES) * RESIZE_MEMORY_ENTRIES;
                        int i = 0;
                        for (long curOffset = startOffset; curOffset >= 0; 
curOffset -= RESIZE_MEMORY_ENTRIES) {
-                               if (shutdown || _prevStoreSize != prevStoreSize)
+                               if (shutdown || _prevStoreSize != 
prevStoreSize) {
+                                       bloomFilter.discard();
                                        return;
+                               }

                                batchProcessEntries(curOffset, 
RESIZE_MEMORY_ENTRIES, new BatchProcessor() {
                                        public Entry process(Entry entry) {
-                                               if (entry.getStoreSize() == 
storeSize) // new size
-                                                       return NOT_MODIFIED;
+                                               entry.setGeneration(generation);
+                                               keyCount.incrementAndGet();

+                                               if (entry.getStoreSize() == 
storeSize) {// new size
+                                                       
bloomFilter.updateFilter(entry.getDigestedRoutingKey());
+
+                                                       return entry;
+                                               }
+
                                                oldEntryList.add(entry);
                                                return null;
                                        }
@@ -1011,7 +1028,9 @@
                        try {
                                if (_prevStoreSize != prevStoreSize)
                                        return;
+                               bloomFilter.merge();
                                prevStoreSize = 0;
+                               flags &= ~FLAG_REBUILD_BLOOM;
                        } finally {
                                configLock.writeLock().unlock();
                        }
@@ -1198,7 +1217,7 @@
                                        try {
                                                if (!isFree(offset)
                                                                && 
Arrays.equals(getDigestedKeyFromOffset(offset), entry.getDigestedRoutingKey())) 
{
-                                                       writeEntry(entry, 
offset);      // overwrite, don't update key count
+                                                       // do nothing
                                                        return true;
                                                }
                                        } catch (IOException e) {
@@ -1211,6 +1230,7 @@
                                        try {
                                                if (isFree(offset)) {
                                                        writeEntry(entry, 
offset);
+                                                       
bloomFilter.updateFilter(entry.getDigestedRoutingKey());
                                                        
keyCount.incrementAndGet();
                                                        return true;
                                                }
@@ -1307,7 +1327,6 @@

                        prevStoreSize = storeSize;
                        storeSize = newStoreSize;
-                       flags |= FLAG_REBUILD_BLOOM;
                        writeConfigFile();
                } finally {
                        configLock.writeLock().unlock();


Reply via email to