remm        2005/03/14 07:33:11

  Modified:    util/java/org/apache/tomcat/util/net PoolTcpEndpoint.java
               http11/src/java/org/apache/coyote/http11
                        Http11Processor.java Http11Protocol.java
  Log:
  - The "new" thread pool currently uses the endpoint to store its stuff.
  - Allocate a worker before accepting. If the pool is full, wait 100ms. This 
should allow taking advantage of the acceptCount.
  - Fix setting a reduced socket timeout.
  
  Revision  Changes    Path
  1.44      +14 -8     
jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net/PoolTcpEndpoint.java
  
  Index: PoolTcpEndpoint.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net/PoolTcpEndpoint.java,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- PoolTcpEndpoint.java      29 Jan 2005 19:30:44 -0000      1.43
  +++ PoolTcpEndpoint.java      14 Mar 2005 15:33:10 -0000      1.44
  @@ -626,21 +626,27 @@
                       // Ignore
                   }
               }
  -            
  -            // Accept the next incoming connection from the server socket
  -            Socket socket = acceptSocket();
   
  -            // Hand this socket off to an appropriate processor
  +            // Allocate a new worker thread
               MasterSlaveWorkerThread workerThread = createWorkerThread();
               if (workerThread == null) {
                   try {
  -                    log.warn(sm.getString("endpoint.noProcessor"));
  -                    socket.close();
  -                } catch (IOException e) {
  -                    ;
  +                    // Wait a little for load to go down: as a result, 
  +                    // no accept will be made until the concurrency is
  +                    // lower than the specified maxThreads, and current
  +                    // connections will wait for a little bit instead of
  +                    // failing right away.
  +                    Thread.sleep(100);
  +                } catch (InterruptedException e) {
  +                    // Ignore
                   }
                   continue;
               }
  +            
  +            // Accept the next incoming connection from the server socket
  +            Socket socket = acceptSocket();
  +
  +            // Hand this socket off to an appropriate processor
               workerThread.assign(socket);
   
               // The processor will recycle itself when it finishes
  
  
  
  1.119     +36 -5     
jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java
  
  Index: Http11Processor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java,v
  retrieving revision 1.118
  retrieving revision 1.119
  diff -u -r1.118 -r1.119
  --- Http11Processor.java      27 Feb 2005 18:18:02 -0000      1.118
  +++ Http11Processor.java      14 Mar 2005 15:33:10 -0000      1.119
  @@ -49,6 +49,7 @@
   import org.apache.tomcat.util.buf.MessageBytes;
   import org.apache.tomcat.util.http.FastHttpDateFormat;
   import org.apache.tomcat.util.http.MimeHeaders;
  +import org.apache.tomcat.util.net.PoolTcpEndpoint;
   import org.apache.tomcat.util.net.SSLSupport;
   import org.apache.tomcat.util.threads.ThreadPool;
   import org.apache.tomcat.util.threads.ThreadWithAttributes;
  @@ -298,6 +299,12 @@
   
   
       /**
  +     * Associated endpoint.
  +     */
  +    protected PoolTcpEndpoint endpoint;
  +
  +
  +    /**
        * Allow a customized the server header for the tin-foil hat folks.
        */
       protected String server = null;
  @@ -356,6 +363,12 @@
           this.threadPool = threadPool;
       }
   
  +    
  +    public void setEndpoint(PoolTcpEndpoint endpoint) {
  +        this.endpoint = endpoint;
  +    }
  +
  +
       /**
        * Add user-agent for which gzip compression didn't works
        * The user agent String given will be exactly matched
  @@ -764,15 +777,33 @@
   
           int keepAliveLeft = maxKeepAliveRequests;
           int soTimeout = socket.getSoTimeout();
  +        int oldSoTimeout = soTimeout;
   
  -        float threadRatio =
  -            (float) threadPool.getCurrentThreadsBusy()
  -            / (float) threadPool.getMaxThreads();
  -        if ((threadRatio > 0.33) && (threadRatio <= 0.66)) {
  +        int threadRatio = 0;
  +        if (threadPool.getCurrentThreadsBusy() > 0) {
  +            threadRatio = (threadPool.getCurrentThreadsBusy() * 100)
  +                / threadPool.getMaxThreads();
  +        } else {
  +            threadRatio = (endpoint.getCurrentThreadsBusy() * 100)
  +                / endpoint.getMaxThreads();
  +        }
  +        if ((threadRatio > 33) && (threadRatio <= 66)) {
               soTimeout = soTimeout / 2;
  -        } else if (threadRatio > 0.66) {
  +        } else if ((threadRatio > 66) && (threadRatio <= 90)) {
               soTimeout = soTimeout / 3;
               keepAliveLeft = 1;
  +        } else if (threadRatio > 90) {
  +            soTimeout = soTimeout / 20;
  +            keepAliveLeft = 1;
  +        }
  +        
  +        if (soTimeout != oldSoTimeout) {
  +            try {
  +                socket.setSoTimeout(soTimeout);
  +            } catch (Throwable t) {
  +                log.debug("Error setting timeout", t);
  +                error = true;
  +            }
           }
   
           boolean keptAlive = false;
  
  
  
  1.63      +1 -0      
jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Protocol.java
  
  Index: Http11Protocol.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Protocol.java,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -r1.62 -r1.63
  --- Http11Protocol.java       29 Jan 2005 19:29:54 -0000      1.62
  +++ Http11Protocol.java       14 Mar 2005 15:33:10 -0000      1.63
  @@ -684,6 +684,7 @@
                   new Http11Processor(proto.maxHttpHeaderSize);
               processor.setAdapter( proto.adapter );
               processor.setThreadPool( proto.tp );
  +            processor.setEndpoint( proto.ep );
               processor.setMaxKeepAliveRequests( proto.maxKeepAliveRequests );
               processor.setTimeout( proto.timeout );
               processor.setDisableUploadTimeout( proto.disableUploadTimeout );
  
  
  

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

Reply via email to