Author: toad
Date: 2006-08-19 21:26:29 +0000 (Sat, 19 Aug 2006)
New Revision: 10210
Added:
trunk/freenet/src/freenet/node/fcp/PutFetchableMessage.java
Modified:
trunk/freenet/src/freenet/client/FetchWaiter.java
trunk/freenet/src/freenet/client/PutWaiter.java
trunk/freenet/src/freenet/client/async/BaseClientPutter.java
trunk/freenet/src/freenet/client/async/ClientCallback.java
trunk/freenet/src/freenet/client/async/ClientPutter.java
trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
trunk/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
trunk/freenet/src/freenet/client/async/PutCompletionCallback.java
trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
trunk/freenet/src/freenet/client/async/SingleFileInserter.java
trunk/freenet/src/freenet/client/async/SplitFileInserter.java
trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
trunk/freenet/src/freenet/client/async/USKInserter.java
trunk/freenet/src/freenet/clients/http/NinjaSpider.java
trunk/freenet/src/freenet/clients/http/Spider.java
trunk/freenet/src/freenet/node/ARKFetcher.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/NodeARKInserter.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/fcp/ClientGet.java
trunk/freenet/src/freenet/node/fcp/ClientPut.java
trunk/freenet/src/freenet/node/fcp/ClientPutBase.java
trunk/freenet/src/freenet/node/fcp/ClientPutDir.java
trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java
trunk/freenet/src/freenet/node/updater/NodeUpdater.java
trunk/freenet/src/freenet/support/DoubleTokenBucket.java
trunk/freenet/src/freenet/support/TokenBucket.java
Log:
Determine when an insert is fetchable, and send a new message PutFetchable when
it is.
Don't start inserting the top before the bottom is fetchable (important with
USKs).
Related changes.
Logging, investigating bwlimitDelay issues.
Modified: trunk/freenet/src/freenet/client/FetchWaiter.java
===================================================================
--- trunk/freenet/src/freenet/client/FetchWaiter.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/client/FetchWaiter.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -53,4 +53,8 @@
public void onMajorProgress() {
// Ignore
}
+
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore
+ }
}
Modified: trunk/freenet/src/freenet/client/PutWaiter.java
===================================================================
--- trunk/freenet/src/freenet/client/PutWaiter.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/client/PutWaiter.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -62,4 +62,8 @@
// Ignore
}
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore
+ }
+
}
Modified: trunk/freenet/src/freenet/client/async/BaseClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BaseClientPutter.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/BaseClientPutter.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -7,5 +7,5 @@
}
public abstract void onMajorProgress();
-
+
}
Modified: trunk/freenet/src/freenet/client/async/ClientCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientCallback.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/ClientCallback.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -25,4 +25,7 @@
/** Called when freenet.async thinks that the request should be
serialized to
* disk, if it is a persistent request. */
public void onMajorProgress();
+
+ /** Called when the inserted data is fetchable (don't rely on this) */
+ public void onFetchable(BaseClientPutter state);
}
Modified: trunk/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientPutter.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/ClientPutter.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -187,5 +187,9 @@
if(currentState == null) return null;
return currentState.getProgressFieldset();
}
+
+ public void onFetchable(ClientPutState state) {
+ client.onFetchable(this);
+ }
}
Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -275,7 +275,7 @@
continue;
}
- Logger.minor(this, "removeFirst() returning
"+req+" ("+rga.getNumber()+")");
+ Logger.minor(this, "removeFirst() returning
"+req+" ("+rga.getNumber()+", prio "+req.getPriorityClass()+", retries
"+req.getRetryCount()+")");
ClientRequester cr = req.getClientRequest();
HashSet v = (HashSet)
allRequestsByClientRequest.get(cr);
v.remove(req);
Modified: trunk/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -1,7 +1,6 @@
package freenet.client.async;
-import java.util.LinkedList;
-import java.util.ListIterator;
+import java.util.Vector;
import freenet.client.InserterException;
import freenet.client.Metadata;
@@ -14,8 +13,9 @@
// LinkedList's rather than HashSet's for memory reasons.
// This class will not be used with large sets, so O(n) is cheaper than
O(1) -
// at least it is on memory!
- private final LinkedList waitingFor;
- private final LinkedList waitingForBlockSet;
+ private final Vector waitingFor;
+ private final Vector waitingForBlockSet;
+ private final Vector waitingForFetchable;
private final PutCompletionCallback cb;
private ClientPutState generator;
private final BaseClientPutter parent;
@@ -26,31 +26,32 @@
public MultiPutCompletionCallback(PutCompletionCallback cb,
BaseClientPutter parent, Object token) {
this.cb = cb;
- this.waitingFor = new LinkedList();
- this.waitingForBlockSet = new LinkedList();
+ waitingFor = new Vector();
+ waitingForBlockSet = new Vector();
+ waitingForFetchable = new Vector();
this.parent = parent;
this.token = token;
finished = false;
}
- public synchronized void onSuccess(ClientPutState state) {
+ public void onSuccess(ClientPutState state) {
+ onBlockSetFinished(state);
+ onFetchable(state);
+ synchronized(this) {
if(finished) return;
waitingFor.remove(state);
if(!(waitingFor.isEmpty() && started))
return;
- /* Using this.e here will cause complete to consider the
- * insert as failed if onFailed has been called in the past
- * for this request. This makes collisions work. It does
- * mean that onSuccess gets called, and then we consider
- * the insert to have failed, which may or may not make sense.
- */
- complete(this.e);
+ }
+ complete(null);
}
public void onFailure(InserterException e, ClientPutState state) {
synchronized(this) {
if(finished) return;
waitingFor.remove(state);
+ waitingForBlockSet.remove(state);
+ waitingForFetchable.remove(state);
if(!(waitingFor.isEmpty() && started)) {
this.e = e;
return;
@@ -59,8 +60,15 @@
complete(e);
}
- private synchronized void complete(InserterException e) {
- finished = true;
+ private void complete(InserterException e) {
+ synchronized(this) {
+ if(finished) return;
+ finished = true;
+ if(e != null && this.e != null && this.e != e) {
+ Logger.error(this, "Completing with "+e+" but
already set "+this.e);
+ }
+ if(e == null) e = this.e;
+ }
if(e != null)
cb.onFailure(e, this);
else
@@ -75,14 +83,18 @@
public synchronized void add(ClientPutState ps) {
if(finished) return;
waitingFor.add(ps);
+ waitingForBlockSet.add(ps);
+ waitingForFetchable.add(ps);
}
- public synchronized void arm() {
+ public void arm() {
boolean allDone;
boolean allGotBlocks;
- started = true;
- allDone = waitingFor.isEmpty();
- allGotBlocks = waitingForBlockSet.isEmpty();
+ synchronized(this) {
+ started = true;
+ allDone = waitingFor.isEmpty();
+ allGotBlocks = waitingForBlockSet.isEmpty();
+ }
if(allGotBlocks) {
cb.onBlockSetFinished(this);
@@ -116,12 +128,15 @@
if(generator == oldState)
generator = newState;
if(oldState == newState) return;
- for(ListIterator i = waitingFor.listIterator(0);i.hasNext();) {
- if(i.next() == oldState) {
- i.remove();
- i.add(newState);
- }
+ for(int i=0;i<waitingFor.size();i++) {
+ if(waitingFor.get(i) == oldState) waitingFor.set(i,
newState);
}
+ for(int i=0;i<waitingFor.size();i++) {
+ if(waitingForBlockSet.get(i) == oldState)
waitingForBlockSet.set(i, newState);
+ }
+ for(int i=0;i<waitingFor.size();i++) {
+ if(waitingForFetchable.get(i) == oldState)
waitingForFetchable.set(i, newState);
+ }
}
public synchronized void onMetadata(Metadata m, ClientPutState state) {
@@ -136,6 +151,7 @@
synchronized(this) {
this.waitingForBlockSet.remove(state);
if(!started) return;
+ if(!waitingForBlockSet.isEmpty()) return;
}
cb.onBlockSetFinished(this);
}
@@ -152,4 +168,13 @@
return null;
}
+ public void onFetchable(ClientPutState state) {
+ synchronized(this) {
+ this.waitingForFetchable.remove(state);
+ if(!started) return;
+ if(!waitingForFetchable.isEmpty()) return;
+ }
+ cb.onFetchable(this);
+ }
+
}
Modified: trunk/freenet/src/freenet/client/async/PutCompletionCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/async/PutCompletionCallback.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/PutCompletionCallback.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -23,6 +23,12 @@
*/
public void onMetadata(Metadata m, ClientPutState state);
+ /** Called when enough data has been inserted that the file can be
+ * retrieved, even if not all data has been inserted yet. Note that this
+ * is only supported for splitfiles; if you get onSuccess() first,
assume
+ * that onFetchable() isn't coming. */
+ public void onFetchable(ClientPutState state);
+
/** Called when the ClientPutState knows that it knows about
* all the blocks it will need to put.
*/
Modified: trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -110,4 +110,8 @@
// Ignore
}
+ public void onFetchable(ClientPutState state) {
+ // Ignore
+ }
+
}
Modified: trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -83,6 +83,7 @@
public void onSuccess(ClientPutState state) {
Logger.minor(this, "Completed "+this);
+ SimpleManifestPutter.this.onFetchable(this);
synchronized(SimpleManifestPutter.this) {
runningPutHandlers.remove(this);
if(!runningPutHandlers.isEmpty()) {
@@ -164,12 +165,18 @@
public void onMajorProgress() {
SimpleManifestPutter.this.onMajorProgress();
}
+
+ public void onFetchable(ClientPutState state) {
+ SimpleManifestPutter.this.onFetchable(this);
+ }
+
}
private final HashMap putHandlersByName;
private final HashSet runningPutHandlers;
private final HashSet putHandlersWaitingForMetadata;
private final HashSet waitingForBlockSets;
+ private final HashSet putHandlersWaitingForFetchable;
private FreenetURI finalURI;
private FreenetURI targetURI;
private boolean finished;
@@ -179,6 +186,7 @@
private boolean insertedAllFiles;
private boolean insertedManifest;
private final HashMap metadataPuttersByMetadata;
+ private final HashMap metadataPuttersUnfetchable;
private final String defaultName;
private int numberOfFiles;
private long totalSize;
@@ -189,6 +197,7 @@
new String[] { "index.html", "index.htm", "default.html",
"default.htm" };
private int bytesOnZip;
private LinkedList elementsToPutInZip;
+ private boolean fetchable;
public SimpleManifestPutter(ClientCallback cb, ClientRequestScheduler
chkSched,
ClientRequestScheduler sskSched, HashMap
manifestElements, short prioClass, FreenetURI target,
@@ -202,8 +211,10 @@
putHandlersByName = new HashMap();
runningPutHandlers = new HashSet();
putHandlersWaitingForMetadata = new HashSet();
+ putHandlersWaitingForFetchable = new HashSet();
waitingForBlockSets = new HashSet();
metadataPuttersByMetadata = new HashMap();
+ metadataPuttersUnfetchable = new HashMap();
elementsToPutInZip = new LinkedList();
makePutHandlers(manifestElements, putHandlersByName);
checkZips();
@@ -286,6 +297,7 @@
}
runningPutHandlers.add(ph);
putHandlersWaitingForMetadata.add(ph);
+
putHandlersWaitingForFetchable.add(ph);
numberOfFiles++;
totalSize += data.size();
}
@@ -417,6 +429,7 @@
new SingleFileInserter(this, this, block,
isMetadata, ctx, false, getCHKOnly, false, baseMetadata,
insertAsArchiveManifest, true);
Logger.minor(this, "Inserting main metadata:
"+metadataInserter);
this.metadataPuttersByMetadata.put(baseMetadata,
metadataInserter);
+ metadataPuttersUnfetchable.put(baseMetadata,
metadataInserter);
metadataInserter.start(null);
} catch (InserterException e) {
fail(e);
@@ -673,4 +686,29 @@
public void onMajorProgress() {
cb.onMajorProgress();
}
+
+ protected void onFetchable(PutHandler handler) {
+ synchronized(this) {
+ putHandlersWaitingForFetchable.remove(handler);
+ if(fetchable) return;
+ if(!putHandlersWaitingForFetchable.isEmpty()) return;
+ if(!hasResolvedBase) return;
+ if(!metadataPuttersUnfetchable.isEmpty()) return;
+ fetchable = true;
+ }
+ cb.onFetchable(this);
+ }
+
+ public void onFetchable(ClientPutState state) {
+ Metadata m = (Metadata) state.getToken();
+ synchronized(this) {
+ metadataPuttersUnfetchable.remove(m);
+ if(!metadataPuttersUnfetchable.isEmpty()) return;
+ if(fetchable) return;
+ if(!putHandlersWaitingForFetchable.isEmpty()) return;
+ fetchable = true;
+ }
+ cb.onFetchable(this);
+ }
+
}
Modified: trunk/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileInserter.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/SingleFileInserter.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -281,6 +281,8 @@
boolean metaInsertSuccess;
boolean splitInsertSetBlocks;
boolean metaInsertSetBlocks;
+ boolean metaInsertStarted;
+ boolean metaFetchable;
/**
* Create a SplitHandler from a stored progress SimpleFieldSet.
@@ -327,9 +329,6 @@
}
newSFI.schedule();
- if(newMetaPutter != null) {
- newMetaPutter.schedule();
- }
}
public SplitHandler() {
@@ -345,11 +344,16 @@
public void onSuccess(ClientPutState state) {
Logger.minor(this, "onSuccess("+state+")");
+ boolean lateStart = false;
synchronized(this) {
if(finished) return;
if(state == sfi) {
Logger.minor(this, "Splitfile insert
succeeded");
splitInsertSuccess = true;
+ if(!metaInsertSuccess &&
!metaInsertStarted) {
+ Logger.error(this, "Splitfile
insert succeeded but metadata not started, starting anyway...");
+ lateStart = true;
+ }
} else if(state == metadataPutter) {
Logger.minor(this, "Metadata insert
succeeded");
metaInsertSuccess = true;
@@ -362,7 +366,10 @@
}
else return;
}
- cb.onSuccess(this);
+ if(lateStart)
+ startMetadata();
+ else if(finished)
+ cb.onSuccess(this);
}
public void onFailure(InserterException e, ClientPutState
state) {
@@ -425,13 +432,6 @@
cb.onFailure(e1, this);
return;
}
-
- try {
-
((SingleFileInserter)metadataPutter).start(null);
- } catch (InserterException e1) {
- fail(e1);
- return;
- }
}
private void fail(InserterException e) {
@@ -511,7 +511,44 @@
fs.put("MetadataPutter",
metadataPutter.getProgressFieldset());
return fs;
}
+
+ public void onFetchable(ClientPutState state) {
+
+ boolean meta;
+
+ synchronized(this) {
+ meta = (state == metadataPutter);
+ if(meta) {
+ if(!metaInsertStarted) {
+ Logger.error(this, "Metadata
insert not started yet got onFetchable for it: "+state+" on "+this);
+ }
+ if(metaFetchable) return;
+ metaFetchable = true;
+ } else {
+ if(state != sfi) {
+ Logger.error(this, "onFetchable
for unknown state "+state);
+ return;
+ }
+ if(metaInsertStarted) return;
+ metaInsertStarted = true;
+ }
+ }
+
+ if(meta)
+ cb.onFetchable(this);
+ else
+ startMetadata();
+ }
+ private void startMetadata() {
+ try {
+
((SingleFileInserter)metadataPutter).start(null);
+ } catch (InserterException e1) {
+ fail(e1);
+ return;
+ }
+ }
+
}
public BaseClientPutter getParent() {
Modified: trunk/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserter.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserter.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -35,6 +35,7 @@
final ClientMetadata cm;
final boolean isMetadata;
private boolean finished;
+ private boolean fetchable;
public final Object token;
final boolean insertAsArchiveManifest;
@@ -248,6 +249,10 @@
}
Logger.minor(this, "Have URIs from all segments");
+ encodeMetadata();
+ }
+
+ private void encodeMetadata() {
boolean missingURIs;
Metadata m = null;
synchronized(this) {
@@ -358,6 +363,22 @@
onAllFinished();
}
+ public void segmentFetchable(SplitFileInserterSegment segment) {
+ Logger.minor(this, "Segment fetchable: "+segment);
+ synchronized(this) {
+ if(finished) return;
+ if(fetchable) return;
+ for(int i=0;i<segments.length;i++) {
+ if(!segments[i].isFetchable()) {
+ Logger.minor(this, "Segment not
fetchable: "+i+": "+segments[i]);
+ return;
+ }
+ }
+ fetchable = true;
+ }
+ cb.onFetchable(this);
+ }
+
private void onAllFinished() {
Logger.minor(this, "All finished");
try {
Modified: trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2006-08-19 18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2006-08-19 21:26:29 UTC (rev 10210)
@@ -298,6 +298,7 @@
public void start() throws InserterException {
Logger.minor(this, "Starting segment "+segNo+" of "+parent+"
("+parent.dataLength+"): "+this+" ( finished="+finished+" encoded="+encoded+"
hasURIs="+hasURIs+")");
boolean fin = true;
+
for(int i=0;i<dataBlockInserters.length;i++) {
if(dataBlocks[i] != null) { // else already finished on
creation
dataBlockInserters[i] =
@@ -336,6 +337,12 @@
if(hasURIs) {
parent.segmentHasURIs(this);
}
+ boolean fetchable;
+ synchronized(this) {
+ fetchable = (blocksCompleted > dataBlocks.length);
+ }
+ if(fetchable)
+ parent.segmentFetchable(this);
if(fin) finish();
if(finished) {
parent.segmentFinished(this);
@@ -454,27 +461,41 @@
public void onSuccess(ClientPutState state) {
SingleBlockInserter sbi = (SingleBlockInserter)state;
int x = sbi.token;
- if(completed(x)) return;
- finish();
+ completed(x);
}
public void onFailure(InserterException e, ClientPutState state) {
SingleBlockInserter sbi = (SingleBlockInserter)state;
int x = sbi.token;
errors.merge(e);
- if(completed(x)) return;
+ completed(x);
+ }
+
+ private void completed(int x) {
+ int total = innerCompleted(x);
+ if(total == -1) return;
+ if(total == dataBlockInserters.length) {
+ parent.segmentFetchable(this);
+ }
+ if(total != dataBlockInserters.length +
checkBlockInserters.length) return;
finish();
}
-
- private synchronized boolean completed(int x) {
+
+ /**
+ * Called when a block has completed.
+ * @param x The block number.
+ * @return -1 if the segment has already finished, otherwise the number
of completed
+ * blocks.
+ */
+ private synchronized int innerCompleted(int x) {
Logger.minor(this, "Completed: "+x+" on "+this+" (
completed="+blocksCompleted+",
total="+(dataBlockInserters.length+checkBlockInserters.length));
- if(finished) return true;
+ if(finished) return -1;
if(x >= dataBlocks.length) {
x -= dataBlocks.length;
if(checkBlockInserters[x] == null) {
Logger.error(this, "Completed twice: check
block "+x+" on "+this);
- return true;
+ return blocksCompleted;
}
checkBlockInserters[x] = null;
try {
@@ -486,7 +507,7 @@
} else {
if(dataBlockInserters[x] == null) {
Logger.error(this, "Completed twice: data block
"+x+" on "+this);
- return true;
+ return blocksCompleted;
}
dataBlockInserters[x] = null;
if(encoded) {
@@ -499,8 +520,7 @@
}
}
blocksCompleted++;
- if(blocksCompleted != dataBlockInserters.length +
checkBlockInserters.length) return true;
- return false;
+ return blocksCompleted;
}
public synchronized boolean isFinished() {
@@ -580,4 +600,12 @@
public synchronized boolean hasURIs() {
return hasURIs;
}
+
+ public synchronized boolean isFetchable() {
+ return blocksCompleted > dataBlocks.length;
+ }
+
+ public void onFetchable(ClientPutState state) {
+ // Ignore
+ }
}
Modified: trunk/freenet/src/freenet/client/async/USKInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKInserter.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/client/async/USKInserter.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -216,4 +216,8 @@
return null;
}
+ public void onFetchable(ClientPutState state) {
+ // Ignore
+ }
+
}
Modified: trunk/freenet/src/freenet/clients/http/NinjaSpider.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/NinjaSpider.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/clients/http/NinjaSpider.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -735,6 +735,10 @@
// Ignore
}
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore
+ }
+
}
Modified: trunk/freenet/src/freenet/clients/http/Spider.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/Spider.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/clients/http/Spider.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -471,4 +471,8 @@
// Ignore
}
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore
+ }
+
}
Modified: trunk/freenet/src/freenet/node/ARKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetcher.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/node/ARKFetcher.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -259,4 +259,8 @@
public void onMajorProgress() {
// Ignore
}
+
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore, we don't insert
+ }
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-08-19 18:20:31 UTC (rev
10209)
+++ trunk/freenet/src/freenet/node/Node.java 2006-08-19 21:26:29 UTC (rev
10210)
@@ -1581,9 +1581,6 @@
}
}
- Logger.minor(this, "Accepting request?");
-
- lastAcceptedRequest = now;
}
// Do we have the bandwidth?
@@ -1605,6 +1602,11 @@
return "Insufficient input bandwidth";
}
+ synchronized(this) {
+ Logger.minor(this, "Accepting request?");
+ lastAcceptedRequest = now;
+ }
+
pInstantRejectIncoming.report(0.0);
// Accept
Modified: trunk/freenet/src/freenet/node/NodeARKInserter.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeARKInserter.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/node/NodeARKInserter.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -230,4 +230,8 @@
// Ignore
}
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore, we don't care
+ }
+
}
\ No newline at end of file
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -1904,7 +1904,7 @@
*/
public void localRejectedOverload(String reason) {
pRejected.report(1.0);
- Logger.minor(this, "Local rejected overload on "+this+" :
pRejected="+pRejected.currentValue());
+ Logger.minor(this, "Local rejected overload ("+reason+") on
"+this+" : pRejected="+pRejected.currentValue());
long now = System.currentTimeMillis();
Peer peer = getPeer();
reportBackoffStatus(now);
Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -577,4 +577,9 @@
return returnBucket;
}
+
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore, we don't insert
+ }
+
}
Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -8,6 +8,7 @@
import freenet.client.InserterException;
import freenet.client.Metadata;
import freenet.client.MetadataUnresolvedException;
+import freenet.client.async.BaseClientPutter;
import freenet.client.async.ClientPutter;
import freenet.keys.FreenetURI;
import freenet.support.HexUtil;
Modified: trunk/freenet/src/freenet/node/fcp/ClientPutBase.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutBase.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutBase.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -31,6 +31,7 @@
// Verbosity bitmasks
private int VERBOSITY_SPLITFILE_PROGRESS = 1;
+ private int VERBOSITY_PUT_FETCHABLE = 256;
private int VERBOSITY_COMPRESSION_START_END = 512;
// Stuff waiting for reconnection
@@ -157,6 +158,15 @@
}
}
}
+
+ public void onFetchable(BaseClientPutter putter) {
+ if(finished) return;
+ if((verbosity & VERBOSITY_PUT_FETCHABLE) ==
VERBOSITY_PUT_FETCHABLE) {
+ PutFetchableMessage msg =
+ new PutFetchableMessage(identifier,
generatedURI);
+ trySendProgressMessage(msg, VERBOSITY_PUT_FETCHABLE,
null);
+ }
+ }
private void trySendFinalMessage(FCPConnectionOutputHandler handler) {
Modified: trunk/freenet/src/freenet/node/fcp/ClientPutDir.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutDir.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutDir.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -58,6 +58,7 @@
if(handler != null && (!handler.isGlobalSubscribed()))
handler.outputHandler.queue(msg);
}
+ Logger.minor(this, "Putting dir "+identifier+" :
"+priorityClass);
}
public ClientPutDir(SimpleFieldSet fs, FCPClient client) throws
PersistenceParseException, IOException {
Modified: trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -8,6 +8,7 @@
import freenet.node.Node;
import freenet.node.RequestStarter;
import freenet.support.Fields;
+import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
import freenet.support.io.Bucket;
import freenet.support.io.BucketFactory;
Modified: trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -70,9 +70,8 @@
return NodeHelloMessage.name;
}
- public void run(FCPConnectionHandler handler, Node node) {
- throw new UnsupportedOperationException();
- // Client should not be sending this!
+ public void run(FCPConnectionHandler handler, Node node) throws
MessageInvalidException {
+ throw new
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "NodeHello goes
from server to client not the other way around", null);
}
}
Added: trunk/freenet/src/freenet/node/fcp/PutFetchableMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PutFetchableMessage.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/node/fcp/PutFetchableMessage.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -0,0 +1,34 @@
+package freenet.node.fcp;
+
+import freenet.keys.FreenetURI;
+import freenet.node.Node;
+import freenet.support.SimpleFieldSet;
+
+public class PutFetchableMessage extends FCPMessage {
+
+ PutFetchableMessage(String ident, FreenetURI uri) {
+ this.identifier = ident;
+ this.uri = uri;
+ }
+
+ final String identifier;
+ final FreenetURI uri;
+
+ public SimpleFieldSet getFieldSet() {
+ SimpleFieldSet fs = new SimpleFieldSet();
+ fs.put("Identifier", identifier);
+ if(uri != null)
+ fs.put("URI", uri.toString(false));
+ return fs;
+ }
+
+ public String getName() {
+ return "PutFetchable";
+ }
+
+ public void run(FCPConnectionHandler handler, Node node)
+ throws MessageInvalidException {
+ throw new
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "PutFetchable
goes from server to client not the other way around", identifier);
+ }
+
+}
Modified: trunk/freenet/src/freenet/node/updater/NodeUpdater.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/NodeUpdater.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/node/updater/NodeUpdater.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -669,4 +669,8 @@
public int getRevocationDNFCounter() {
return revocationDNFCounter;
}
+
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore, we don't insert
+ }
}
Modified: trunk/freenet/src/freenet/support/DoubleTokenBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/DoubleTokenBucket.java 2006-08-19
18:20:31 UTC (rev 10209)
+++ trunk/freenet/src/freenet/support/DoubleTokenBucket.java 2006-08-19
21:26:29 UTC (rev 10210)
@@ -76,6 +76,7 @@
}
public synchronized void addTokens() {
+ Logger.minor(this, "current="+current+" forced="+curForced);
addTokensNoClip();
if(curForced > maxForced) curForced = maxForced;
if(current > max) current = max;
Modified: trunk/freenet/src/freenet/support/TokenBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/TokenBucket.java 2006-08-19 18:20:31 UTC
(rev 10209)
+++ trunk/freenet/src/freenet/support/TokenBucket.java 2006-08-19 21:26:29 UTC
(rev 10210)
@@ -127,6 +127,7 @@
// will therefore go negative. We have paid off the initial
debt, and we have
// paid off the tokens, any more debt is a problem for future
blockingGrab's!
current -= tokens;
+ Logger.minor(this, "Blocking grab removed tokens:
current="+current);
}
public synchronized void recycle(long tokens) {
@@ -188,7 +189,6 @@
return 0;
}
if(nextTick + nanosPerTick > nowNS) {
- timeLastTick = nextTick;
return 1;
}
return (nowNS - nextTick) / nanosPerTick;