Author: toad
Date: 2009-01-15 22:07:21 +0000 (Thu, 15 Jan 2009)
New Revision: 25067
Modified:
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/RequestSender.java
Log:
Fix turtle leak, logging.
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2009-01-15 20:31:30 UTC (rev
25066)
+++ trunk/freenet/src/freenet/node/Node.java 2009-01-15 22:07:21 UTC (rev
25067)
@@ -4062,6 +4062,8 @@
return container;
}
+ private volatile long turtleCount;
+
/**
* Make a running request sender into a turtle request.
* Backoff: when the transfer finishes, or after 10 seconds if no
cancellation.
@@ -4077,7 +4079,7 @@
if(!this.registerTurtleTransfer(sender)) {
// Too many turtles running, or already two turtles for
this key (we allow two in case one peer turtles as a DoS).
sender.killTurtle();
- System.err.println("Didn't make turtle for key
"+sender.key+" for "+sender);
+ System.err.println("Didn't make turtle (global) for key
"+sender.key+" for "+sender);
return;
}
PeerNode from = sender.transferringFrom();
@@ -4086,7 +4088,7 @@
// Abort it.
unregisterTurtleTransfer(sender);
sender.killTurtle();
- System.err.println("Didn't make turtle for key
"+sender.key+" for "+sender);
+ System.err.println("Didn't make turtle (peer) for key
"+sender.key+" for "+sender);
return;
}
System.err.println("TURTLING: "+sender.key+" for "+sender);
@@ -4094,11 +4096,16 @@
synchronized(transferringRequestSenders) {
transferringRequestSenders.remove((NodeCHK)sender.key);
}
+ turtleCount++;
// Abort downstream transfers, set the turtle mode flag and set
up the backoff callback.
sender.setTurtle();
}
+ public long getTurtleCount() {
+ return turtleCount;
+ }
+
private static int MAX_TURTLES = 10;
private static int MAX_TURTLES_PER_KEY = 2;
@@ -4107,13 +4114,19 @@
private boolean registerTurtleTransfer(RequestSender sender) {
Key key = sender.key;
synchronized(turtlingTransfers) {
- if(turtlingTransfers.size() >= MAX_TURTLES) return
false;
+ if(turtlingTransfers.size() >= MAX_TURTLES) {
+ System.err.println("Too many turtles running
globally");
+ return false;
+ }
if(!turtlingTransfers.containsKey(key)) {
turtlingTransfers.put(key, new RequestSender[]
{ sender });
return true;
} else {
RequestSender[] senders =
turtlingTransfers.get(key);
- if(senders.length >= MAX_TURTLES_PER_KEY)
return false;
+ if(senders.length >= MAX_TURTLES_PER_KEY) {
+ System.err.println("Too many turtles
for key globally");
+ return false;
+ }
for(int i=0;i<senders.length;i++) {
if(senders[i] == sender) {
Logger.error(this, "Registering
turtle for "+sender+" : "+key+" twice! (globally)");
@@ -4124,6 +4137,7 @@
System.arraycopy(senders, 0, newSenders, 0,
senders.length);
newSenders[senders.length] = sender;
turtlingTransfers.put(key, newSenders);
+ System.err.println("Running turtles:
"+turtlingTransfers.size());
return true;
}
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2009-01-15 20:31:30 UTC
(rev 25066)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2009-01-15 22:07:21 UTC
(rev 25067)
@@ -4274,8 +4274,14 @@
public boolean registerTurtleTransfer(RequestSender sender) {
Key key = sender.key;
synchronized(turtlingTransfers) {
- if(turtlingTransfers.size() >= MAX_TURTLES_PER_PEER)
return false;
- if(turtlingTransfers.containsKey(key)) return false;
+ if(turtlingTransfers.size() >= MAX_TURTLES_PER_PEER) {
+ System.err.println("Too many turtles for peer");
+ return false;
+ }
+ if(turtlingTransfers.containsKey(key)) {
+ System.err.println("Already fetching key from
peer");
+ return false;
+ }
turtlingTransfers.put(key, sender);
return true;
}
Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java 2009-01-15 20:31:30 UTC
(rev 25066)
+++ trunk/freenet/src/freenet/node/RequestSender.java 2009-01-15 22:07:21 UTC
(rev 25067)
@@ -839,6 +839,8 @@
synchronized(this) {
if(turtleMode) {
System.err.println("TURTLE
FAILED: "+key+" for "+this+" : "+e);
+
next.unregisterTurtleTransfer(this);
+
node.unregisterTurtleTransfer(this);
}
}
if
(e.getReason()==RetrievalException.SENDER_DISCONNECTED)
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs