noel        2003/10/19 16:41:54

  Modified:    src/java/org/apache/james/util/connection
                        ServerConnection.java
  Log:
  Eliminate openConnections member and track directly as Collection.size().  Add 
diagnostic message when connection limit reached.
  
  Revision  Changes    Path
  1.12      +20 -13    
james-server/src/java/org/apache/james/util/connection/ServerConnection.java
  
  Index: ServerConnection.java
  ===================================================================
  RCS file: 
/home/cvs/james-server/src/java/org/apache/james/util/connection/ServerConnection.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- ServerConnection.java     28 Apr 2003 14:00:42 -0000      1.11
  +++ ServerConnection.java     19 Oct 2003 23:41:54 -0000      1.12
  @@ -152,11 +152,6 @@
       private final ArrayList clientConnectionRunners = new ArrayList();
   
       /**
  -     * The current number of open client connections.
  -     */
  -     private int openConnections = 0;
  -
  -    /**
        * The thread used to manage this server connection.
        */
       private Thread serverConnectionThread;
  @@ -249,7 +244,6 @@
                   runner = null;
               }
               clientConnectionRunners.clear();
  -            openConnections = 0;
           }
   
           getLogger().debug("Cleaned up clients - " + this.toString());
  @@ -266,9 +260,8 @@
           synchronized (clientConnectionRunners) {
               ClientConnectionRunner clientConnectionRunner = 
(ClientConnectionRunner)runnerPool.get();
               clientConnectionRunners.add(clientConnectionRunner);
  -            openConnections++;
               if (getLogger().isDebugEnabled()) {
  -                getLogger().debug("Adding one connection for a total of " + 
openConnections);
  +                getLogger().debug("Adding one connection for a total of " + 
clientConnectionRunners.size());
               }
               return clientConnectionRunner;
           }
  @@ -282,9 +275,8 @@
       private void removeClientConnectionRunner(ClientConnectionRunner 
clientConnectionRunner) {
           synchronized (clientConnectionRunners) {
               if (clientConnectionRunners.remove(clientConnectionRunner)) {
  -                openConnections--;
                   if (getLogger().isDebugEnabled()) {
  -                    getLogger().debug("Releasing one connection, leaving a total of 
" + openConnections);
  +                    getLogger().debug("Releasing one connection, leaving a total of 
" + clientConnectionRunners.size());
                   }
                   runnerPool.put(clientConnectionRunner);
               }
  @@ -336,9 +328,16 @@
                   }
                   ClientConnectionRunner runner = null;
                   synchronized (clientConnectionRunners) {
  -                    if ((maxOpenConn > 0) && (openConnections >= maxOpenConn)) {
  +                    if ((maxOpenConn > 0) && (clientConnectionRunners.size() >= 
maxOpenConn)) {
                           if (getLogger().isWarnEnabled()) {
  -                           getLogger().warn("Maximum number of open connections 
exceeded - refusing connection.  Current number of connections is " + openConnections);
  +                           getLogger().warn("Maximum number of open connections 
exceeded - refusing connection.  Current number of connections is " + 
clientConnectionRunners.size());
  +                           if (getLogger().isWarnEnabled()) {
  +                               Iterator runnerIterator = 
clientConnectionRunners.iterator();
  +                               getLogger().info("Connections: ");
  +                               while( runnerIterator.hasNext() ) {
  +                                                                getLogger().info("  
  " + ((ClientConnectionRunner)runnerIterator.next()).toString());
  +                               }
  +                           }
                           }
                           try {
                               clientSocket.close();
  @@ -359,7 +358,8 @@
                       // This error indicates that the underlying thread pool
                       // is out of threads.  For robustness, we catch this and
                       // cleanup
  -                    getLogger().error("Internal error - insufficient threads 
available to service request.", e);
  +                    getLogger().error("Internal error - insufficient threads 
available to service request.  " +
  +                                      Thread.activeCount() + " threads in service 
request pool.", e);
                       try {
                           clientSocket.close();
                       } catch (IOException ignored) {
  @@ -399,6 +399,13 @@
            * The thread of execution associated with this client connection.
            */
           private Thread clientSocketThread;
  +
  +        /**
  +         * Returns string for diagnostic logging
  +         */
  +        public String toString() {
  +            return getClass().getName() + " for " + clientSocket + " on " + 
clientSocketThread;
  +        }
   
           public ClientConnectionRunner() {
           }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to