Update of /cvsroot/freenet/freenet/src/freenet In directory sc8-pr-cvs1:/tmp/cvs-serv17715/freenet
Modified Files: ConnectionHandler.java OpenConnectionManager.java Peer.java Log Message: Blacklist connections who are rapidly failing a lot, this should help with a lot of the CPU overload on 6205, also fix the hashCode from tcpAddress and therefore from Peer, this could have been another whole bug of it's own. Index: ConnectionHandler.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/ConnectionHandler.java,v retrieving revision 1.159 retrieving revision 1.160 diff -u -r1.159 -r1.160 --- ConnectionHandler.java 20 Sep 2003 19:58:59 -0000 1.159 +++ ConnectionHandler.java 23 Sep 2003 00:55:09 -0000 1.160 @@ -1246,6 +1246,7 @@ public void queuedClose() { logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this); if(logDEBUG) logDEBUG("Queued close", true); + ocm.blackList(peer); terminate(); if(logDEBUG) logDEBUG("Terminated in queuedClose()"); } Index: OpenConnectionManager.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/OpenConnectionManager.java,v retrieving revision 1.106 retrieving revision 1.107 diff -u -r1.106 -r1.107 --- OpenConnectionManager.java 19 Sep 2003 17:18:04 -0000 1.106 +++ OpenConnectionManager.java 23 Sep 2003 00:55:10 -0000 1.107 @@ -8,6 +8,7 @@ import freenet.support.Logger; import freenet.support.MultiValueTable; import freenet.support.LRUQueue; +import freenet.support.BlackLRUQueue; import freenet.support.io.NIOInputStream; import freenet.transport.tcpConnection; @@ -53,6 +54,8 @@ private Object openConnsSync = new Object(); private final LRUQueue lru = new LRUQueue(); + // Queue of blacklisted peers + private final BlackLRUQueue blq = new BlackLRUQueue(60000,100,3); private int maxConnections = -1; private boolean logDEBUG = true; @@ -318,6 +321,13 @@ } } + public void blackList(Peer p){ + Core.logger.log(this, "blackListing " + p, Logger.DEBUG); + if ( p != null && p.getIdentity() != null && p.getAddress() != null ) { + blq.push(p); + } + } + /** * Creates a new Connection which is started and added. * @param c The Core to connect from @@ -340,24 +350,36 @@ boolean updatedRefcount = false; boolean weStarted = false; + blq.clean(); + Core.logger.log(this, "Current blackListQueue size: " + blq.size() + + ", Checking " + p, + Logger.DEBUG); + if ( blq.isBlackListed(p) ) { + Core.logger.log(this, "Attempted to open connection for blackListed " + + p,Logger.DEBUG); + ConnectFailedException e = + new ConnectFailedException(p.getAddress(), + p.getIdentity(), + "BlackListed", + true); + Core.logger.log(this, "Failed to connect: " + e, Logger.DEBUG); + throw e; + } try { synchronized(connectionJobs) { - while(ct == null || ct.done) { - ct = (ConnectionJob)(connectionJobs.get(p)); - if(ct != null && ct.done) { - if(connectionJobs.get(p) == ct) { - connectionJobs.remove(p); - continue; - } - } - break; - } - if(ct != null) { - Core.logger.log(this, "Got "+ct+", waiting on it", - Logger.DEBUG); - updatedRefcount = true; - ct.incRefcount(); - } else { + if ( ( ct = (ConnectionJob)connectionJobs.get(p) ) != null ) { + if ( ct.done ) { + connectionJobs.remove(p); + ct = null; + } else { + Core.logger.log(this, "Got "+ct+", waiting on it", + Logger.DEBUG); + updatedRefcount = true; + ct.incRefcount(); + } + } + + if(ct == null) { weStarted = true; ct = new ConnectionJob(c, p); connectionJobs.put(p, ct); Index: Peer.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/Peer.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Peer.java 12 Sep 2003 01:52:25 -0000 1.3 +++ Peer.java 23 Sep 2003 00:55:10 -0000 1.4 @@ -58,7 +58,7 @@ } public int hashCode() { - return id.hashCode() ^ addr.hashCode(); + return id.hashCode() ^ addr.hashCode(); } public String toString() { _______________________________________________ cvs mailing list [EMAIL PROTECTED] http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs