Author: j16sdiz
Date: 2008-08-20 08:20:43 +0000 (Wed, 20 Aug 2008)
New Revision: 22047

Modified:
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
   trunk/freenet/src/freenet/store/FreenetStore.java
   trunk/freenet/src/freenet/store/RAMFreenetStore.java
Log:
bug 2516: probablyInStore() for BerkeleyDBFreenetStore/RAMFreenetStore

Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-08-20 
00:24:11 UTC (rev 22046)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-08-20 
08:20:43 UTC (rev 22047)
@@ -37,7 +37,6 @@

 import freenet.crypt.RandomSource;
 import freenet.keys.KeyVerifyException;
-import freenet.node.NodeInitException;
 import freenet.node.SemiOrderedShutdownHook;
 import freenet.support.Fields;
 import freenet.support.HexUtil;
@@ -2303,4 +2302,27 @@
        envConfig.setConfigParam("je.env.backgroundSleepInterval", "10000" /* 
microseconds */); // 10ms
         return envConfig;
     }
+
+    public boolean probablyInStore(byte[] routingKey) {
+       DatabaseEntry routingkeyDBE = new DatabaseEntry(routingKey);
+               DatabaseEntry blockDBE = new DatabaseEntry();
+               synchronized (this) {
+                       if (closed)
+                               return false;
+               }
+
+       Cursor c = null;
+               try {
+                       return keysDB.get(null, routingkeyDBE, blockDBE, 
LockMode.READ_UNCOMMITTED) == OperationStatus.SUCCESS;
+               } catch (DatabaseException e) {
+                       return false;
+               } finally {
+                       try {
+                               if (c != null)
+                                       c.close();
+                       } catch (DatabaseException e) {
+                               // ignore
+                       }
+               }
+       }
 }

Modified: trunk/freenet/src/freenet/store/FreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/FreenetStore.java   2008-08-20 00:24:11 UTC 
(rev 22046)
+++ trunk/freenet/src/freenet/store/FreenetStore.java   2008-08-20 08:20:43 UTC 
(rev 22047)
@@ -53,4 +53,12 @@
        public long writes();

        public long keyCount();
+       
+       /**
+        * Check if a routing key probably
+        * 
+        * @param routingkey
+        * @return <code>false</code> <b>only</b> if the key does not exist in 
store.
+        */
+       public boolean probablyInStore(byte[] routingKey);
 }

Modified: trunk/freenet/src/freenet/store/RAMFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/RAMFreenetStore.java        2008-08-20 
00:24:11 UTC (rev 22046)
+++ trunk/freenet/src/freenet/store/RAMFreenetStore.java        2008-08-20 
08:20:43 UTC (rev 22047)
@@ -122,4 +122,8 @@
                return writes;
        }

+       public boolean probablyInStore(byte[] routingKey) {
+               ByteArrayWrapper key = new ByteArrayWrapper(routingKey);
+               return blocksByRoutingKey.get(key) != null;
+       }
 }


Reply via email to