2006-01-25 jrandom

* Run the peer profile coalescing/reorganization outside the job queue
      (on one of the timers), to cut down on some job queue congestion.  Also,
      trim old profiles while running, not just when starting up.
    * Slightly more sane intra-floodfill-node netDb activity (only flood new
      entries)
    * Workaround in the I2PTunnelHTTPServer for some bad requests (though the
      source of the bug is not yet addressed)
    * Better I2PSnark reconnection handling
    * Further cleanup in the new tunnel build process
    * Make sure we expire old participants properly
    * Remove much of the transient overload throttling (it wasn't using a good
      metric)
This commit is contained in:
jrandom
2006-01-26 04:28:15 +00:00
committed by zzz
parent ab8e11657f
commit f22601b477
6 changed files with 47 additions and 12 deletions

View File

@ -113,10 +113,10 @@ public class ConnectionAcceptor implements Runnable
// ok, already updated
socketChanged = false;
}
if (serverSocket == null) {
Snark.debug("Server socket went away.. boo hiss", Snark.ERROR);
stop = true;
return;
while ( (serverSocket == null) && (!stop)) {
serverSocket = I2PSnarkUtil.instance().getServerSocket();
if (serverSocket == null)
try { Thread.sleep(10*1000); } catch (InterruptedException ie) {}
}
try
{
@ -128,9 +128,7 @@ public class ConnectionAcceptor implements Runnable
I2PServerSocket ss = I2PSnarkUtil.instance().getServerSocket();
if (ss != serverSocket) {
serverSocket = ss;
} else {
Snark.debug("Null socket accepted, but socket wasn't changed?", Snark.ERROR);
try { Thread.sleep(10*1000); } catch (InterruptedException ie) {}
socketChanged = true;
}
}
} else {
@ -154,7 +152,8 @@ public class ConnectionAcceptor implements Runnable
try
{
serverSocket.close();
if (serverSocket != null)
serverSocket.close();
}
catch (I2PException ignored) { }

View File

@ -152,7 +152,11 @@ public class I2PSnarkUtil {
}
public I2PServerSocket getServerSocket() {
return _manager.getServerSocket();
I2PSocketManager mgr = _manager;
if (mgr != null)
return mgr.getServerSocket();
else
return null;
}
String getOurIPString() {

View File

@ -38,18 +38,21 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
super(host, port, privData, l, notifyThis, tunnel);
_spoofHost = spoofHost;
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 });
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000 });
}
public I2PTunnelHTTPServer(InetAddress host, int port, File privkey, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
super(host, port, privkey, privkeyname, l, notifyThis, tunnel);
_spoofHost = spoofHost;
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 });
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000 });
}
public I2PTunnelHTTPServer(InetAddress host, int port, InputStream privData, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
super(host, port, privData, privkeyname, l, notifyThis, tunnel);
_spoofHost = spoofHost;
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 });
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000 });
}
/**
@ -291,6 +294,19 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Read the http command [" + command.toString() + "]");
int trimmed = 0;
if (command.length() > 0) {
for (int i = 0; i < command.length(); i++) {
if (command.charAt(i) == 0) {
command = command.deleteCharAt(i);
i--;
trimmed++;
}
}
}
if (trimmed > 0)
getTunnel().getContext().statManager().addRateData("i2ptunnel.httpNullWorkaround", trimmed, 0);
while (true) {
buf.setLength(0);
ok = DataHelper.readLine(in, buf);

View File

@ -115,7 +115,9 @@ public class User {
for (Iterator iter = _petnames.getNames().iterator(); iter.hasNext(); ) {
String name = (String)iter.next();
PetName pn = _petnames.getByName(name);
if (AddressesServlet.PROTO_TAG.equals(pn.getProtocol()))
if (pn == null) continue;
String proto = pn.getProtocol();
if ( (proto != null) && (AddressesServlet.PROTO_TAG.equals(proto)) )
rv.add(pn.getLocation());
}
if (rv.size() <= 0) {

View File

@ -176,8 +176,8 @@ public class Rate {
}
public void coalesce() {
long now = now();
synchronized (_lock) {
long now = now();
long measuredPeriod = now - _lastCoalesceDate;
if (measuredPeriod < _period) {
// no need to coalesce

View File

@ -1,4 +1,18 @@
$Id: history.txt,v 1.394 2006/01/22 19:51:57 jrandom Exp $
$Id: history.txt,v 1.395 2006/01/25 10:34:28 dust Exp $
2006-01-25 jrandom
* Run the peer profile coalescing/reorganization outside the job queue
(on one of the timers), to cut down on some job queue congestion. Also,
trim old profiles while running, not just when starting up.
* Slightly more sane intra-floodfill-node netDb activity (only flood new
entries)
* Workaround in the I2PTunnelHTTPServer for some bad requests (though the
source of the bug is not yet addressed)
* Better I2PSnark reconnection handling
* Further cleanup in the new tunnel build process
* Make sure we expire old participants properly
* Remove much of the transient overload throttling (it wasn't using a good
metric)
2006-01-25 dust
* Fix IRC client proxy to use ISO-8859-1.