Author: fhanik
Date: Mon Aug  6 16:19:17 2007
New Revision: 563330

URL: http://svn.apache.org/viewvc?view=rev&rev=563330
Log:
Improve upon poller timeout handling, to not waste cycles running the timeout 
setting too often
same fix as 6.0.x

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
    tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/SocketProperties.java

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?view=diff&rev=563330&r1=563329&r2=563330
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Mon Aug  
6 16:19:17 2007
@@ -710,7 +710,7 @@
                     // Associate the connection with the processor. The next 
request 
                     // processed by this thread will use either a new or a 
recycled
                     // processor.
-                    if (log.isDebugEnabled()) log.debug("Not recycling 
["+processor+"] 
Comet="+((NioEndpoint.KeyAttachment)socket.getAttachment(false)).getComet());
+                    //if (log.isDebugEnabled()) log.debug("Not recycling 
["+processor+"] 
Comet="+((NioEndpoint.KeyAttachment)socket.getAttachment(false)).getComet());
                     connections.put(socket, processor);
                     if (processor.comet) {
                         NioEndpoint.KeyAttachment att = 
(NioEndpoint.KeyAttachment)socket.getAttachment(false);

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?view=diff&rev=563330&r1=563329&r2=563330
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Mon Aug  6 
16:19:17 2007
@@ -1574,8 +1574,11 @@
             long now = System.currentTimeMillis();
             //don't process timeouts too frequently, but if the selector 
simply timed out
             //then we can check timeouts to avoid gaps
-            if ( (now < nextExpiration) && (keyCount>0 || hasEvents) && 
(!close) ) return;
-            nextExpiration = now + (long)socketProperties.getSoTimeout();
+            if ( ((keyCount>0 || hasEvents) ||(now < nextExpiration)) && 
(!close) ) {
+                return;
+            }
+            long prevExp = nextExpiration; //for logging purposes only
+            nextExpiration = now + socketProperties.getTimeoutInterval();
             //timeout
             Set<SelectionKey> keys = selector.keys();
             int keycount = 0;
@@ -1613,7 +1616,9 @@
                     cancelledKey(key, SocketStatus.ERROR,false);
                 }
             }//for
-            if ( log.isDebugEnabled() ) log.debug("Poller processed 
"+keycount+" keys through timeout");
+            if ( log.isDebugEnabled() ) log.debug("timeout completed: keys 
processed="+keycount+"; now="+now+"; nextExpiration="+prevExp+"; "+
+                                                  "keyCount="+keyCount+"; 
hasEvents="+hasEvents +"; eval="+( (now < prevExp) && (keyCount>0 || hasEvents) 
&& (!close) ));
+
         }
     }
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketProperties.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketProperties.java?view=diff&rev=563330&r1=563329&r2=563330
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketProperties.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketProperties.java Mon Aug  
6 16:19:17 2007
@@ -156,6 +156,13 @@
      * Default value is 1
      */
     protected int performanceBandwidth = 1;
+    
+    /**
+     * Minimum time to pass by before another socket expiration run performs
+     * This avoids unncessary loops over all sockets when the poller is busy
+     */
+    protected long timeoutInterval = 1000;
+    
     private Socket properties;
 
     public void setProperties(Socket socket) throws SocketException{
@@ -349,6 +356,14 @@
 
     public void setDirectBufferPool(int directBufferPool) {
         this.bufferPool = directBufferPool;
+    }
+
+    public void setTimeoutInterval(long toi){
+        this.timeoutInterval = toi;
+    }
+
+    public long getTimeoutInterval(){
+        return timeoutInterval;
     }
 
 }



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

Reply via email to