You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2015/05/27 19:45:31 UTC

svn commit: r1682087 - in /tomcat/trunk/java/org/apache: coyote/http11/Http11InputBuffer.java tomcat/util/net/Nio2Endpoint.java tomcat/util/net/SocketWrapperBase.java

Author: remm
Date: Wed May 27 17:45:31 2015
New Revision: 1682087

URL: http://svn.apache.org/r1682087
Log:
Avoid IO peeking with NIO2 to read the request line (introduced in r1681742), as the processor and its buffer is no longer associated and may not be the one processing the request.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java
    tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java?rev=1682087&r1=1682086&r2=1682087&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java Wed May 27 17:45:31 2015
@@ -398,6 +398,9 @@ public class Http11InputBuffer implement
                         // Haven't read any request data yet so use the keep-alive
                         // timeout.
                         wrapper.setReadTimeout(wrapper.getEndpoint().getKeepAliveTimeout());
+                        if (!wrapper.isNonBlocking()) {
+                            return false;
+                        }
                     }
                     if (!fill(false)) {
                         // A read is pending, so no longer in initial state

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1682087&r1=1682086&r2=1682087&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Wed May 27 17:45:31 2015
@@ -1316,6 +1316,10 @@ public class Nio2Endpoint extends Abstra
             }
         }
 
+        @Override
+        public boolean isNonBlocking() {
+            return false;
+        }
 
         /*
          * This should only be called from a thread that currently holds a lock

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java?rev=1682087&r1=1682086&r2=1682087&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Wed May 27 17:45:31 2015
@@ -266,6 +266,9 @@ public abstract class SocketWrapperBase<
     public SocketBufferHandler getSocketBufferHandler() { return socketBufferHandler; }
     public abstract boolean isReadPending();
     public abstract boolean isWritePending();
+    public boolean isNonBlocking() {
+        return true;
+    }
 
     public boolean hasDataToWrite() {
         return !socketBufferHandler.isWriteBufferEmpty() || bufferedWrites.size() > 0;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: svn commit: r1682087 - in /tomcat/trunk/java/org/apache: coyote/http11/Http11InputBuffer.java tomcat/util/net/Nio2Endpoint.java tomcat/util/net/SocketWrapperBase.java

Posted by Rémy Maucherat <re...@apache.org>.
2015-05-27 20:22 GMT+02:00 Mark Thomas <ma...@apache.org>:

> On 27/05/2015 18:45, remm@apache.org wrote:
> > Author: remm
> > Date: Wed May 27 17:45:31 2015
> > New Revision: 1682087
> >
> > URL: http://svn.apache.org/r1682087
> > Log:
> > Avoid IO peeking with NIO2 to read the request line (introduced in
> r1681742), as the processor and its buffer is no longer associated and may
> not be the one processing the request.
>
> Are you sure this is necessary? If a non-blocking read is issued the
> read is into the read buffer in the socket wrapper not directly into the
> Http11InputBuffer.
>
> Ok, you are correct, since the read call doesn't hang on to the buffer it
gets, I can remove the code. It does feel weird though.

Rémy

Re: svn commit: r1682087 - in /tomcat/trunk/java/org/apache: coyote/http11/Http11InputBuffer.java tomcat/util/net/Nio2Endpoint.java tomcat/util/net/SocketWrapperBase.java

Posted by Mark Thomas <ma...@apache.org>.
On 27/05/2015 18:45, remm@apache.org wrote:
> Author: remm
> Date: Wed May 27 17:45:31 2015
> New Revision: 1682087
> 
> URL: http://svn.apache.org/r1682087
> Log:
> Avoid IO peeking with NIO2 to read the request line (introduced in r1681742), as the processor and its buffer is no longer associated and may not be the one processing the request.

Are you sure this is necessary? If a non-blocking read is issued the
read is into the read buffer in the socket wrapper not directly into the
Http11InputBuffer.

Mark


> 
> Modified:
>     tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java
>     tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
>     tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java
> 
> Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java
> URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java?rev=1682087&r1=1682086&r2=1682087&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java (original)
> +++ tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java Wed May 27 17:45:31 2015
> @@ -398,6 +398,9 @@ public class Http11InputBuffer implement
>                          // Haven't read any request data yet so use the keep-alive
>                          // timeout.
>                          wrapper.setReadTimeout(wrapper.getEndpoint().getKeepAliveTimeout());
> +                        if (!wrapper.isNonBlocking()) {
> +                            return false;
> +                        }
>                      }
>                      if (!fill(false)) {
>                          // A read is pending, so no longer in initial state
> 
> Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
> URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1682087&r1=1682086&r2=1682087&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
> +++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Wed May 27 17:45:31 2015
> @@ -1316,6 +1316,10 @@ public class Nio2Endpoint extends Abstra
>              }
>          }
>  
> +        @Override
> +        public boolean isNonBlocking() {
> +            return false;
> +        }
>  
>          /*
>           * This should only be called from a thread that currently holds a lock
> 
> Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java
> URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java?rev=1682087&r1=1682086&r2=1682087&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java (original)
> +++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Wed May 27 17:45:31 2015
> @@ -266,6 +266,9 @@ public abstract class SocketWrapperBase<
>      public SocketBufferHandler getSocketBufferHandler() { return socketBufferHandler; }
>      public abstract boolean isReadPending();
>      public abstract boolean isWritePending();
> +    public boolean isNonBlocking() {
> +        return true;
> +    }
>  
>      public boolean hasDataToWrite() {
>          return !socketBufferHandler.isWriteBufferEmpty() || bufferedWrites.size() > 0;
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org