[freenet-cvs] r17486 - in trunk/freenet/src/freenet: client/async node

toad at freenetproject.org toad at freenetproject.org
Sat Feb 2 23:20:27 UTC 2008


Author: toad
Date: 2008-02-02 23:20:27 +0000 (Sat, 02 Feb 2008)
New Revision: 17486

Modified:
   trunk/freenet/src/freenet/client/async/OfferedKeysList.java
   trunk/freenet/src/freenet/node/NodeClientCore.java
Log:
ClientKey's are optional. Start the request asynchronously without using one.

Modified: trunk/freenet/src/freenet/client/async/OfferedKeysList.java
===================================================================
--- trunk/freenet/src/freenet/client/async/OfferedKeysList.java	2008-02-02 23:08:40 UTC (rev 17485)
+++ trunk/freenet/src/freenet/client/async/OfferedKeysList.java	2008-02-02 23:20:27 UTC (rev 17486)
@@ -10,7 +10,6 @@
 import freenet.crypt.RandomSource;
 import freenet.keys.ClientKey;
 import freenet.keys.Key;
-import freenet.node.LowLevelGetException;
 import freenet.node.NodeClientCore;
 import freenet.node.RequestScheduler;
 import freenet.node.SendableRequest;
@@ -65,9 +64,10 @@
 	public synchronized void onNoOffers(ClientKey key) {
 		logMINOR = Logger.shouldLog(Logger.MINOR, this);
 		if(logMINOR) Logger.minor(this, "No offers for "+key+" , removing it");
-		keys.remove(key);
-		keysList.remove(key);
-		clientKeysByKey.remove(key.getNodeKey());
+		Key k = key.getNodeKey();
+		keys.remove(k);
+		keysList.remove(k);
+		clientKeysByKey.remove(k);
 	}
 
 	public synchronized boolean isEmpty() {
@@ -82,10 +82,10 @@
 	public Object chooseKey() {
 		// Pick a random key
 		if(keysList.isEmpty()) return null;
-		ClientKey ck = (ClientKey) keysList.remove(random.nextInt(keysList.size()));
-		keys.remove(ck);
-		clientKeysByKey.remove(ck.getNodeKey());
-		return ck;
+		Key k = (Key) keysList.remove(random.nextInt(keysList.size()));
+		keys.remove(k);
+		clientKeysByKey.remove(k);
+		return k;
 	}
 
 	public Object getClient() {
@@ -110,13 +110,8 @@
 	}
 	
 	public boolean send(NodeClientCore node, RequestScheduler sched, Object keyNum) {
-		ClientKey key = (ClientKey) keyNum;
-		try {
-			core.realGetKey(key, false, true, // if it's not cached it won't propagate FIXME support =false??
-					false);
-		} catch (LowLevelGetException e) {
-			Logger.minor(this, "Caught low level get exception "+e, e);
-		}
+		Key key = (Key) keyNum;
+		core.asyncGet(key, true);// Have to cache it in order to propagate it; FIXME
 		return true;
 	}
 

Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java	2008-02-02 23:08:40 UTC (rev 17485)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java	2008-02-02 23:20:27 UTC (rev 17486)
@@ -436,6 +436,31 @@
 			}
 		}, "Startup completion thread");
 	}
+
+	/**
+	 * Start an asynchronous fetch of the key in question, which will complete to the datastore.
+	 * It will not decode the data because we don't provide a ClientKey. It will not return 
+	 * anything and will run asynchronously.
+	 * @param key
+	 */
+	public void asyncGet(Key key, boolean cache) {
+		long uid = random.nextLong();
+		if(!node.lockUID(uid, false, false, false)) {
+			Logger.error(this, "Could not lock UID just randomly generated: "+uid+" - probably indicates broken PRNG");
+			return;
+		}
+		try {
+			Object o = node.makeRequestSender(key, node.maxHTL(), uid, null, node.getLocation(), false, false, cache, false);
+			if(o instanceof CHKBlock) {
+				return; // Already have it.
+			}
+			// Else it has started a request.
+			if(logMINOR)
+				Logger.minor(this, "Started "+o+" for "+uid+" for "+key);
+		} finally {
+			node.unlockUID(uid, false, false, true, false);
+		}
+	}
 	
 	public ClientKeyBlock realGetKey(ClientKey key, boolean localOnly, boolean cache, boolean ignoreStore) throws LowLevelGetException {
 		if(key instanceof ClientCHK)




More information about the cvs mailing list