Author: j16sdiz
Date: 2008-07-01 10:29:05 +0000 (Tue, 01 Jul 2008)
New Revision: 20895

Modified:
   
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
Log:
digested key cache

Modified: 
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java  
    2008-07-01 09:46:07 UTC (rev 20894)
+++ 
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java  
    2008-07-01 10:29:05 UTC (rev 20895)
@@ -13,6 +13,7 @@
 import java.text.DecimalFormat;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
@@ -39,6 +40,7 @@
 import freenet.keys.KeyVerifyException;
 import freenet.node.SemiOrderedShutdownHook;
 import freenet.support.BloomFilter;
+import freenet.support.ByteArrayWrapper;
 import freenet.support.Fields;
 import freenet.support.HexUtil;
 import freenet.support.Logger;
@@ -1475,14 +1477,27 @@
         */
        private byte[] salt;

+       private Map<ByteArrayWrapper, byte[]> digestRoutingKeyCache = new 
LinkedHashMap<ByteArrayWrapper, byte[]>() {
+               @Override
+               protected boolean removeEldestEntry(Map.Entry<ByteArrayWrapper, 
byte[]> eldest) {
+                       return size() > 128;
+               }
+       };
+       
        /**
         * Get hashed routing key
         *
         * @param routingKey
         * @return
         */
-       // TODO use a little cache?
        private byte[] getDigestedRoutingKey(byte[] routingKey) {
+               ByteArrayWrapper key = new ByteArrayWrapper(routingKey);
+               synchronized (digestRoutingKeyCache) {
+                       byte[] dk = digestRoutingKeyCache.get(key);
+                       if (dk != null)
+                               return dk;
+               }
+               
                MessageDigest digest = SHA256.getMessageDigest();
                try {
                        digest.update(routingKey);
@@ -1491,6 +1506,10 @@
                        byte[] hashedRoutingKey = digest.digest();
                        assert hashedRoutingKey.length == 0x20;

+                       synchronized (digestRoutingKeyCache) {
+                               digestRoutingKeyCache.put(key, 
hashedRoutingKey);
+                       }
+                       
                        return hashedRoutingKey;
                } finally {
                        SHA256.returnMessageDigest(digest);


Reply via email to