Author: toad
Date: 2006-08-11 21:33:20 +0000 (Fri, 11 Aug 2006)
New Revision: 10042
Modified:
trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java
trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/PacketSender.java
trunk/freenet/src/freenet/node/TestnetHandler.java
trunk/freenet/src/freenet/node/TextModeClientInterface.java
trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
trunk/freenet/src/freenet/node/fcp/ShutdownMessage.java
trunk/freenet/src/freenet/node/updater/NodeUpdater.java
Log:
pInstantReject.
Shutdown logging.
Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-08-11 18:16:19 UTC (rev 10041)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-08-11 21:33:20 UTC (rev 10042)
@@ -158,6 +158,7 @@
overviewList.addChild("li", "nodeUptime:\u00a0" +
nodeUptimeString);
overviewList.addChild("li",
"missRoutingDistance:\u00a0" + fix4.format(missRoutingDistance));
overviewList.addChild("li", "backedoffPercent:\u00a0" +
fix1.format(backedoffPercent));
+ overviewList.addChild("li", "pInstantReject:\u00a0" +
fix1.format(node.pRejectIncomingInstantly()));
nextTableCell = overviewTableRow.addChild("td");
}
Modified: trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java 2006-08-11
18:16:19 UTC (rev 10041)
+++ trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java 2006-08-11
21:33:20 UTC (rev 10042)
@@ -50,7 +50,7 @@
MultiValueTable headers = new MultiValueTable();
headers.put("Location",
".?shutdownconfirm="+node.formPassword.hashCode());
ctx.sendReplyHeaders(302, "Found", headers, null, 0);
- this.node.exit();
+ this.node.exit("Shutdown from fproxy");
return;
}else if(request.getParam("restartconfirm").length() > 0){
// Do the actual restart
Modified: trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketManager.java 2006-08-11
18:16:19 UTC (rev 10041)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketManager.java 2006-08-11
21:33:20 UTC (rev 10042)
@@ -99,20 +99,20 @@
System.err.println("Exiting on deadlock, but not running in the wrapper! Please
restart the node manually.");
// No wrapper :
we don't want to let it harm the network!
- node.exit();
+ node.exit("USM
deadlock");
}
} catch (Throwable t) {
if(!hasRedirected) {
System.err.println("Error : can't restart the node : consider installing the
wrapper. PLEASE REPORT THAT ERROR TO devl at freenetproject.org");
t.printStackTrace();
}
- node.exit();
+ node.exit("USM deadlock
and error");
}
}
} else {
Logger.error(this, "MAIN LOOP
TERMINATED");
System.err.println("MAIN LOOP
TERMINATED!");
-
System.exit(freenet.node.Node.EXIT_MAIN_LOOP_LOST);
+ node.exit(Node.EXIT_MAIN_LOOP_LOST);
}
}
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-08-11 18:16:19 UTC (rev
10041)
+++ trunk/freenet/src/freenet/node/Node.java 2006-08-11 21:33:20 UTC (rev
10042)
@@ -601,6 +601,8 @@
public boolean nodeAveragePingAlertRelevant;
/** If true, include local addresses on noderefs */
public boolean includeLocalAddressesInNoderefs;
+ /** Average proportion of requests rejected immediately due to overload
*/
+ public final TimeDecayingRunningAverage pInstantRejectIncoming;
private final HashSet runningUIDs;
@@ -986,6 +988,7 @@
byte[] pwdBuf = new byte[16];
random.nextBytes(pwdBuf);
this.formPassword = Base64.encode(pwdBuf);
+ pInstantRejectIncoming = new TimeDecayingRunningAverage(0,
60000, 0.0, 1.0);
nodeStarter=ns;
if(logConfigHandler != lc)
logConfigHandler=lc;
@@ -2433,13 +2436,16 @@
if((now - lastAcceptedRequest >
MAX_INTERREQUEST_TIME) && canAcceptAnyway) {
Logger.minor(this, "Accepting request
anyway (take one every 10 secs to keep bwlimitDelayTime updated)");
lastAcceptedRequest = now;
+ pInstantRejectIncoming.report(0.0);
return null;
}
+ pInstantRejectIncoming.report(1.0);
return ">MAX_PING_TIME ("+pingTime+")";
}
if(pingTime > SUB_MAX_PING_TIME) {
double x = ((double)(pingTime -
SUB_MAX_PING_TIME)) / (MAX_PING_TIME - SUB_MAX_PING_TIME);
if(random.nextDouble() < x) {
+ pInstantRejectIncoming.report(1.0);
return ">SUB_MAX_PING_TIME
("+pingTime+")";
}
}
@@ -2449,18 +2455,21 @@
if((now - lastAcceptedRequest >
MAX_INTERREQUEST_TIME) && canAcceptAnyway) {
Logger.minor(this, "Accepting request
anyway (take one every 10 secs to keep bwlimitDelayTime updated)");
lastAcceptedRequest = now;
+ pInstantRejectIncoming.report(0.0);
return null;
}
+ pInstantRejectIncoming.report(1.0);
return ">MAX_THROTTLE_DELAY
("+bwlimitDelayTime+")";
}
if(bwlimitDelayTime > SUB_MAX_THROTTLE_DELAY) {
double x = ((double)(bwlimitDelayTime -
SUB_MAX_THROTTLE_DELAY)) / (MAX_THROTTLE_DELAY - SUB_MAX_THROTTLE_DELAY);
if(random.nextDouble() < x) {
+ pInstantRejectIncoming.report(1.0);
return ">SUB_MAX_THROTTLE_DELAY
("+bwlimitDelayTime+")";
}
}
- Logger.minor(this, "Accepting request");
+ Logger.minor(this, "Accepting request?");
lastAcceptedRequest = now;
}
@@ -2470,16 +2479,22 @@
(isInsert ? (isSSK ?
this.remoteSskInsertBytesSentAverage : this.remoteChkInsertBytesSentAverage)
: (isSSK ?
this.remoteSskFetchBytesSentAverage :
this.remoteChkFetchBytesSentAverage)).currentValue();
int expectedSent = (int)Math.max(expected, 0);
- if(!requestOutputThrottle.instantGrab(expectedSent)) return
"Insufficient output bandwidth";
+ if(!requestOutputThrottle.instantGrab(expectedSent)) {
+ pInstantRejectIncoming.report(1.0);
+ return "Insufficient output bandwidth";
+ }
expected =
(isInsert ? (isSSK ?
this.remoteSskInsertBytesReceivedAverage :
this.remoteChkInsertBytesReceivedAverage)
: (isSSK ?
this.remoteSskFetchBytesReceivedAverage :
this.remoteChkFetchBytesReceivedAverage)).currentValue();
int expectedReceived = (int)Math.max(expected, 0);
if(!requestInputThrottle.instantGrab(expectedReceived)) {
requestOutputThrottle.recycle(expectedSent);
+ pInstantRejectIncoming.report(1.0);
return "Insufficient input bandwidth";
}
-
+
+ pInstantRejectIncoming.report(0.0);
+
// Accept
return null;
}
@@ -3385,12 +3400,25 @@
this.fcpServer = fcp;
}
- public void exit(){
- this.park();
- System.out.println("Goodbye. from "+this);
- System.exit(0);
+ public void exit(int reason) {
+ try {
+ this.park();
+ System.out.println("Goodbye.");
+ System.out.println(reason);
+ } finally {
+ System.exit(reason);
+ }
}
+ public void exit(String reason){
+ try {
+ this.park();
+ System.out.println("Goodbye. from "+this+"
("+reason+")");
+ } finally {
+ System.exit(0);
+ }
+ }
+
/**
* Get the node into a state where it can be stopped safely
* May be called twice - once in exit (above) and then again
@@ -3850,4 +3878,8 @@
else
Logger.error(this, "Don't know what to do with
"+block+" should be queued for reinsert");
}
+
+ public double pRejectIncomingInstantly() {
+ return pInstantRejectIncoming.currentValue();
+ }
}
Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java 2006-08-11 18:16:19 UTC
(rev 10041)
+++ trunk/freenet/src/freenet/node/PacketSender.java 2006-08-11 21:33:20 UTC
(rev 10042)
@@ -80,14 +80,14 @@
System.err.println("Exiting on deadlock, but not running in the wrapper! Please
restart the node manually.");
// No wrapper : we
don't want to let it harm the network!
- node.exit();
+ node.exit("PacketSender
deadlock");
}
} catch (Throwable t) {
if(!Node.logConfigHandler.getFileLoggerHook().hasRedirectedStdOutErrNoLock()) {
System.err.println("Error : can't restart the node : consider installing the
wrapper. PLEASE REPORT THAT ERROR TO devl at freenetproject.org");
t.printStackTrace();
}
- node.exit();
+ node.exit("PacketSender
deadlock and error");
}
}
Modified: trunk/freenet/src/freenet/node/TestnetHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/TestnetHandler.java 2006-08-11 18:16:19 UTC
(rev 10041)
+++ trunk/freenet/src/freenet/node/TestnetHandler.java 2006-08-11 21:33:20 UTC
(rev 10042)
@@ -78,7 +78,7 @@
Logger.normal(this,"Starting testnet server on
port"+testnetPort);
} catch (IOException e) {
Logger.error(this, "Could not bind to testnet
port: "+testnetPort);
- System.exit(Node.EXIT_TESTNET_FAILED);
+ node.exit(Node.EXIT_TESTNET_FAILED);
return;
}
while(!server.isClosed()) {
@@ -101,7 +101,7 @@
this.testnetPort=port;
}catch( IOException e){
Logger.error(this, "Error while stopping the
testnet handler.");
- System.exit(Node.EXIT_TESTNET_FAILED);
+ node.exit(Node.EXIT_TESTNET_FAILED);
return;
}
}
Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-08-11
18:16:19 UTC (rev 10041)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-08-11
21:33:20 UTC (rev 10042)
@@ -325,7 +325,7 @@
sb.append("Shutting node down.\r\n");
out.write(sb.toString().getBytes());
out.flush();
- n.exit();
+ n.exit("Shutdown from console");
} else if(uline.startsWith("RESTART")) {
StringBuffer sb = new StringBuffer();
sb.append("Restarting the node.\r\n");
Modified: trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
2006-08-11 18:16:19 UTC (rev 10041)
+++ trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
2006-08-11 21:33:20 UTC (rev 10042)
@@ -217,7 +217,6 @@
} catch (IOException e) {
Logger.error(this, "Could not bind to TMCI port:
"+tempBindTo+":"+port);
System.err.println("Could not bind to TMCI port:
"+tempBindTo+":"+port);
- System.exit(-1);
return;
}
try {
Modified: trunk/freenet/src/freenet/node/fcp/ShutdownMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ShutdownMessage.java 2006-08-11
18:16:19 UTC (rev 10041)
+++ trunk/freenet/src/freenet/node/fcp/ShutdownMessage.java 2006-08-11
21:33:20 UTC (rev 10042)
@@ -21,6 +21,6 @@
public void run(FCPConnectionHandler handler, Node node) {
FCPMessage msg = new
ProtocolErrorMessage(ProtocolErrorMessage.SHUTTING_DOWN,true,"The node is
shutting down","Node");
handler.outputHandler.queue(msg);
- node.exit();
+ node.exit("Received FCP shutdown message");
}
}
\ No newline at end of file
Modified: trunk/freenet/src/freenet/node/updater/NodeUpdater.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/NodeUpdater.java 2006-08-11
18:16:19 UTC (rev 10041)
+++ trunk/freenet/src/freenet/node/updater/NodeUpdater.java 2006-08-11
21:33:20 UTC (rev 10042)
@@ -378,7 +378,7 @@
String err = "CATASTROPHIC
ERROR: Deleted "+oldConfig+" but cannot rename "+newConfig+" to "+oldConfig+"
THEREFORE THE NODE WILL NOT START! Please resolve the problem by renaming
"+newConfig+" to "+oldConfig;
System.err.println(err);
Logger.error(this, err);
- node.exit();
+ node.exit("Updater error");
return;
}
}
@@ -396,7 +396,7 @@
node.getNodeStarter().restart();
} else{
System.out.println("New version has been downloaded:
please restart your node!");
- node.exit();
+ node.exit("New version ready but cannot auto-restart");
}
System.err.println("WTF? Restart returned!?");
}