[freenet-cvs] r20895 - branches/saltedhashstore/freenet/src/freenet/store

j16sdiz at freenetproject.org j16sdiz at freenetproject.org
Tue Jul 1 10:29:06 UTC 2008


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);




More information about the cvs mailing list