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

Reply via email to