r27211 - trunk/freenet/src/freenet/clients/http

[email protected] Wed, 22 Apr 2009 12:22:09 +0000
Newsgroups gmane.network.freenet.cvs
Message-ID <[email protected]>
Author: toad
Date: 2009-04-22 12:22:09 +0000 (Wed, 22 Apr 2009)
New Revision: 27211

Modified:
   trunk/freenet/src/freenet/clients/http/FProxyFetchInProgress.java
   trunk/freenet/src/freenet/clients/http/FProxyFetchResult.java
   trunk/freenet/src/freenet/clients/http/FProxyFetchTracker.java
   trunk/freenet/src/freenet/clients/http/FProxyFetchWaiter.java
   trunk/freenet/src/freenet/clients/http/FProxyToadlet.java
Log:
Fix some performance regressions, don't wait for 2 seconds on coalescing, don't re-run the request, do rerun the request if we coalesced with a request which failed non-fatally, but if it failed fatally (e.g. too big) then tell the user


Modified: trunk/freenet/src/freenet/clients/http/FProxyFetchInProgress.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FProxyFetchInProgress.java	2009-04-22 12:13:53 UTC (rev 27210)
+++ trunk/freenet/src/freenet/clients/http/FProxyFetchInProgress.java	2009-04-22 12:22:09 UTC (rev 27211)
@@ -109,14 +109,14 @@
 		return waiter;
 	}
 
-	synchronized FProxyFetchResult innerGetResult() {
+	synchronized FProxyFetchResult innerGetResult(boolean hasWaited) {
 		lastTouched = System.currentTimeMillis();
 		FProxyFetchResult res;
 		if(data != null)
-			res = new FProxyFetchResult(this, data, mimeType, timeStarted, goneToNetwork, getETA());
+			res = new FProxyFetchResult(this, data, mimeType, timeStarted, goneToNetwork, getETA(), hasWaited);
 		else
 			res = new FProxyFetchResult(this, mimeType, size, timeStarted, goneToNetwork,
-					totalBlocks, requiredBlocks, fetchedBlocks, failedBlocks, fatallyFailedBlocks, finalizedBlocks, failed, getETA());
+					totalBlocks, requiredBlocks, fetchedBlocks, failedBlocks, fatallyFailedBlocks, finalizedBlocks, failed, getETA(), hasWaited);
 		results.add(res);
 		return res;
 	}
@@ -283,4 +283,10 @@
 		if(fetchedBlocks - fetchedBlocksPreNetwork < 5) return -1;
 		return (System.currentTimeMillis() - timeStarted) * ((requiredBlocks - fetchedBlocksPreNetwork) / (fetchedBlocks - fetchedBlocksPreNetwork));
 	}
+
+	public synchronized boolean notFinishedOrFatallyFinished() {
+		if(data == null && failed == null) return true;
+		if(failed != null && failed.isFatal()) return true;
+		return false;
+	}
 }

Modified: trunk/freenet/src/freenet/clients/http/FProxyFetchResult.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FProxyFetchResult.java	2009-04-22 12:13:53 UTC (rev 27210)
+++ trunk/freenet/src/freenet/clients/http/FProxyFetchResult.java	2009-04-22 12:22:09 UTC (rev 27211)
@@ -36,15 +36,17 @@
 	/** Finalized blocks? */
 	final boolean finalizedBlocks;
 	
+	
 	/** Failed */
 	final FetchException failed;
 	
 	final FProxyFetchInProgress progress;
+	final boolean hasWaited;
 
 	final long eta;
 
 	/** Constructor when we are returning the data */
-	FProxyFetchResult(FProxyFetchInProgress parent, Bucket data, String mimeType, long timeStarted, boolean goneToNetwork, long eta) {
+	FProxyFetchResult(FProxyFetchInProgress parent, Bucket data, String mimeType, long timeStarted, boolean goneToNetwork, long eta, boolean hasWaited) {
 		this.data = data;
 		this.mimeType = mimeType;
 		this.size = data.size();
@@ -55,10 +57,11 @@
 		failed = null;
 		this.progress = parent;
 		this.eta = eta;
+		this.hasWaited = hasWaited;
 	}
 
 	/** Constructor when we are not returning the data, because it is still running or it failed */
-	FProxyFetchResult(FProxyFetchInProgress parent, String mimeType, long size, long timeStarted, boolean goneToNetwork, int totalBlocks, int requiredBlocks, int fetchedBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedBlocks, FetchException failed, long eta) {
+	FProxyFetchResult(FProxyFetchInProgress parent, String mimeType, long size, long timeStarted, boolean goneToNetwork, int totalBlocks, int requiredBlocks, int fetchedBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedBlocks, FetchException failed, long eta, boolean hasWaited) {
 		this.data = null;
 		this.mimeType = mimeType;
 		this.size = size;
@@ -73,6 +76,7 @@
 		this.failed = failed;
 		this.progress = parent;
 		this.eta = eta;
+		this.hasWaited = hasWaited;
 	}
 	
 	/** Must be called when fproxy has finished with the data */
@@ -83,5 +87,9 @@
 	public boolean hasData() {
 		return data != null;
 	}
+
+	public boolean hasWaited() {
+		return hasWaited;
+	}
 	
 }

Modified: trunk/freenet/src/freenet/clients/http/FProxyFetchTracker.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FProxyFetchTracker.java	2009-04-22 12:13:53 UTC (rev 27210)
+++ trunk/freenet/src/freenet/clients/http/FProxyFetchTracker.java	2009-04-22 12:22:09 UTC (rev 27211)
@@ -53,7 +53,7 @@
 				Object[] check = fetchers.getArray(key);
 				for(int i=0;i<check.length;i++) {
 					progress = (FProxyFetchInProgress) check[i];
-					if(progress.maxSize == maxSize 
+					if((progress.maxSize == maxSize && progress.notFinishedOrFatallyFinished())
 							|| progress.hasData()) return progress.getWaiter();
 				}
 			}

Modified: trunk/freenet/src/freenet/clients/http/FProxyFetchWaiter.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FProxyFetchWaiter.java	2009-04-22 12:13:53 UTC (rev 27210)
+++ trunk/freenet/src/freenet/clients/http/FProxyFetchWaiter.java	2009-04-22 12:22:09 UTC (rev 27211)
@@ -15,6 +15,7 @@
 	private boolean awoken;
 	
 	public FProxyFetchResult getResult() {
+		boolean waited;
 		synchronized(this) {
 			if(!(finished || hasWaited || awoken)) {
 				awoken = false;
@@ -23,9 +24,11 @@
 				} catch (InterruptedException e) { 
 					// Not likely
 				};
+				hasWaited = true;
 			}
+			waited = hasWaited;
 		}
-		return progress.innerGetResult();
+		return progress.innerGetResult(waited);
 	}
 
 	public void close() {

Modified: trunk/freenet/src/freenet/clients/http/FProxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FProxyToadlet.java	2009-04-22 12:13:53 UTC (rev 27210)
+++ trunk/freenet/src/freenet/clients/http/FProxyToadlet.java	2009-04-22 12:22:09 UTC (rev 27211)
@@ -599,7 +599,7 @@
 		try {
 			if(Logger.shouldLog(Logger.MINOR, this))
 				Logger.minor(this, "FProxy fetching "+key+" ("+maxSize+ ')');
-			if(data == null && fe == null) {
+			if((data == null && fe == null) || fr.hasWaited()) {
 			FetchResult result = fetch(key, maxSize, new RequestClient() {
 				public boolean persistent() {
 					return false;