Author: j16sdiz
Date: 2008-07-14 15:35:29 +0000 (Mon, 14 Jul 2008)
New Revision: 21139

Modified:
   
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
   branches/saltedhashstore/freenet/src/freenet/support/BloomFilter.java
Log:
hooks for remove keys from bloom filter

Modified: 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
   2008-07-14 14:30:06 UTC (rev 21138)
+++ 
branches/saltedhashstore/freenet/src/freenet/store/saltedhash/SaltedHashFreenetStore.java
   2008-07-14 15:35:29 UTC (rev 21139)
@@ -269,7 +269,7 @@
                                                // ignore
                                        }

-                                       // Overwrite old offset
+                                       // Overwrite old offset with same key
                                        Entry entry = new Entry(routingKey, 
header, data);
                                        writeEntry(entry, oldOffset);
                                        writes.incrementAndGet();
@@ -286,7 +286,7 @@
                                                // write to free block
                                                if (logDEBUG)
                                                        Logger.debug(this, 
"probing, write to i=" + i + ", offset=" + offset[i]);
-                                               
bloomFilter.updateFilter(cipherManager.getDigestedKey(routingKey));
+                                               
bloomFilter.addKey(cipherManager.getDigestedKey(routingKey));
                                                writeEntry(entry, offset[i]);
                                                writes.incrementAndGet();
                                                keyCount.incrementAndGet();
@@ -298,11 +298,13 @@
                                // no free blocks, overwrite the first one
                                if (logDEBUG)
                                        Logger.debug(this, "collision, write to 
i=0, offset=" + offset[0]);
-                               
bloomFilter.updateFilter(cipherManager.getDigestedKey(routingKey));
+                               
bloomFilter.addKey(cipherManager.getDigestedKey(routingKey));
                                oldEntry = readEntry(offset[0], null, false);
                                writeEntry(entry, offset[0]);
                                writes.incrementAndGet();
-                               if (oldEntry.generation != generation)
+                               if (oldEntry.generation == generation)
+                                       
bloomFilter.removeKey(oldEntry.getDigestedRoutingKey());
+                               else
                                        keyCount.incrementAndGet();
                        } finally {
                                unlockPlainKey(routingKey, false, lockMap);
@@ -943,7 +945,8 @@
                                
WrapperManager.signalStarting(RESIZE_MEMORY_ENTRIES * 30 * 1000 + 1000);
                                batchProcessEntries(curOffset, 
RESIZE_MEMORY_ENTRIES, new BatchProcessor() {
                                        public Entry process(Entry entry) {
-                                               if (entry.generation != 
generation) {
+                                               int oldGeneration = 
entry.generation;
+                                               if (oldGeneration != 
generation) {
                                                        entry.generation = 
generation;
                                                        
keyCount.incrementAndGet();
                                                }
@@ -952,7 +955,7 @@
                                                        // new size, don't have 
to relocate
                                                        if (entry.generation != 
generation) {
                                                                // update filter
-                                                               
bloomFilter.updateFilter(entry.getDigestedRoutingKey());
+                                                               
bloomFilter.addKey(entry.getDigestedRoutingKey());
                                                                return entry;
                                                        } else {
                                                                return 
NOT_MODIFIED;
@@ -960,6 +963,14 @@
                                                }

                                                // remove from store, prepare 
for relocation
+                                               if (oldGeneration == 
generation) {
+                                                       // should be impossible
+                                                       Logger.error(this, //
+                                                               "new generation 
object with wrong storeSize. DigestedRoutingKey=" //
+                                                               + 
HexUtil.bytesToHex(entry.getDigestedRoutingKey()) //
+                                                               + ", Offset=" + 
entry.curOffset);
+                                                       
bloomFilter.removeKey(entry.getDigestedRoutingKey());
+                                               }
                                                try {
                                                        
entry.setData(readHeader(entry.curOffset), readData(entry.curOffset));
                                                        oldEntryList.add(entry);
@@ -1044,7 +1055,7 @@
                                batchProcessEntries(curOffset, 
RESIZE_MEMORY_ENTRIES, new BatchProcessor() {
                                        public Entry process(Entry entry) {
                                                if (entry.generation != 
generation) {
-                                                       
bloomFilter.updateFilter(entry.getDigestedRoutingKey());
+                                                       
bloomFilter.addKey(entry.getDigestedRoutingKey());
                                                        
keyCount.incrementAndGet();

                                                        entry.generation = 
generation;
@@ -1215,7 +1226,7 @@
                                        try {
                                                if (isFree(offset)) {
                                                        writeEntry(entry, 
offset);
-                                                       
bloomFilter.updateFilter(entry.getDigestedRoutingKey());
+                                                       
bloomFilter.addKey(entry.getDigestedRoutingKey());
                                                        
keyCount.incrementAndGet();
                                                        return true;
                                                }

Modified: branches/saltedhashstore/freenet/src/freenet/support/BloomFilter.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/BloomFilter.java       
2008-07-14 14:30:06 UTC (rev 21138)
+++ branches/saltedhashstore/freenet/src/freenet/support/BloomFilter.java       
2008-07-14 15:35:29 UTC (rev 21139)
@@ -64,7 +64,7 @@
                this.k = k;
        }

-       public void updateFilter(byte[] key) {
+       public void addKey(byte[] key) {
                int[] hashes = getHashes(key);
                lock.writeLock().lock();
                try {
@@ -75,9 +75,13 @@
                }

                if (forkedFilter != null)
-                       forkedFilter.updateFilter(key);
+                       forkedFilter.addKey(key);
        }

+       public void removeKey(byte[] key) {
+               // ignore
+       }
+
        public boolean checkFilter(byte[] key) {
                int[] hashes = getHashes(key);
                lock.readLock().lock();


Reply via email to