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