You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/05/01 16:23:55 UTC
svn commit: r1478017 - in /tomcat/trunk/java/org/apache/coyote: ./ http11/
Author: markt
Date: Wed May 1 14:23:55 2013
New Revision: 1478017
URL: http://svn.apache.org/r1478017
Log:
Refactor to simplify support for non-blocking IO across all HTTP
connectors
Modified:
tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java
tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
tomcat/trunk/java/org/apache/coyote/http11/InternalOutputBuffer.java
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Wed May 1 14:23:55 2013
@@ -57,7 +57,6 @@ public abstract class AbstractProcessor<
response = new Response();
response.setHook(this);
request.setResponse(response);
-
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Wed May 1 14:23:55 2013
@@ -56,12 +56,20 @@ public abstract class AbstractHttp11Proc
protected abstract Log getLog();
+
/**
* The string manager for this package.
*/
protected static final StringManager sm =
StringManager.getManager(Constants.Package);
+
+ /**
+ * Output.
+ */
+ protected AbstractOutputBuffer<S> outputBuffer;
+
+
/*
* Tracks how many internal filters are in the filter library so they
* are skipped when looking for pluggable filters.
@@ -184,12 +192,6 @@ public abstract class AbstractHttp11Proc
/**
- * Socket buffering.
- */
- protected int socketBuffer = -1;
-
-
- /**
* Max saved post size.
*/
protected int maxSavePostSize = 4 * 1024;
@@ -458,14 +460,14 @@ public abstract class AbstractHttp11Proc
* Set the socket buffer flag.
*/
public void setSocketBuffer(int socketBuffer) {
- this.socketBuffer = socketBuffer;
+ outputBuffer.setSocketBuffer(socketBuffer);
}
/**
* Get the socket buffer flag.
*/
public int getSocketBuffer() {
- return socketBuffer;
+ return outputBuffer.getSocketBuffer();
}
/**
Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java Wed May 1 14:23:55 2013
@@ -32,7 +32,7 @@ import org.apache.tomcat.util.net.Abstra
import org.apache.tomcat.util.net.SocketWrapper;
import org.apache.tomcat.util.res.StringManager;
-public abstract class AbstractOutputBuffer<S> implements OutputBuffer{
+public abstract class AbstractOutputBuffer<S> implements OutputBuffer {
// ----------------------------------------------------- Instance Variables
@@ -95,9 +95,14 @@ public abstract class AbstractOutputBuff
*/
protected long byteCount = 0;
- // -------------------------------------------------------------- Variables
+ /**
+ * Socket buffering.
+ */
+ protected int socketBuffer = -1;
+ // -------------------------------------------------------------- Variables
+
/**
* The string manager for this package.
*/
@@ -163,10 +168,25 @@ public abstract class AbstractOutputBuff
}
- // --------------------------------------------------- OutputBuffer Methods
+ /**
+ * Set the socket buffer flag.
+ */
+ public void setSocketBuffer(int socketBuffer) {
+ this.socketBuffer = socketBuffer;
+ }
/**
+ * Get the socket buffer flag.
+ */
+ public int getSocketBuffer() {
+ return socketBuffer;
+ }
+
+
+ // --------------------------------------------------- OutputBuffer Methods
+
+ /**
* Write the contents of a byte chunk.
*
* @param chunk byte chunk
@@ -548,9 +568,15 @@ public abstract class AbstractOutputBuff
}
}
- // --------------------------------------------------------- Public Methods
+ //------------------------------------------------------ Non-blocking writes
- public abstract boolean supportsNonBlocking();
+ protected abstract boolean hasDataToWrite();
+ protected abstract void setBlocking(boolean blocking);
+ protected abstract boolean flushBuffer(boolean block) throws IOException;
+
+ protected final boolean isReady() {
+ return !hasDataToWrite();
+ }
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Wed May 1 14:23:55 2013
@@ -82,12 +82,6 @@ public class Http11AprProcessor extends
/**
- * Output.
- */
- protected final InternalAprOutputBuffer outputBuffer;
-
-
- /**
* Sendfile data.
*/
protected AprEndpoint.SendfileData sendfileData = null;
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Wed May 1 14:23:55 2013
@@ -87,12 +87,6 @@ public class Http11NioProcessor extends
/**
- * Output.
- */
- protected final InternalNioOutputBuffer outputBuffer;
-
-
- /**
* Sendfile data.
*/
protected NioEndpoint.SendfileData sendfileData = null;
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Wed May 1 14:23:55 2013
@@ -74,12 +74,6 @@ public class Http11Processor extends Abs
/**
- * Output.
- */
- protected final InternalOutputBuffer outputBuffer;
-
-
- /**
* SSL information.
*/
protected SSLSupport sslSupport;
Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java Wed May 1 14:23:55 2013
@@ -86,11 +86,6 @@ public class InternalAprOutputBuffer ext
// --------------------------------------------------------- Public Methods
@Override
- public boolean supportsNonBlocking() {
- return false;
- }
-
- @Override
public void init(SocketWrapper<Long> socketWrapper,
AbstractEndpoint endpoint) throws IOException {
@@ -214,8 +209,29 @@ public class InternalAprOutputBuffer ext
}
- // ----------------------------------- OutputStreamOutputBuffer Inner Class
+ //------------------------------------------------------ Non-blocking writes
+
+ @Override
+ protected boolean hasDataToWrite() {
+ // TODO
+ return false;
+ }
+
+ @Override
+ protected void setBlocking(boolean blocking) {
+ // TODO
+ }
+
+
+ @Override
+ protected boolean flushBuffer(boolean block) throws IOException {
+ // TODO
+ return false;
+ }
+
+
+ // ----------------------------------- OutputStreamOutputBuffer Inner Class
/**
* This class is an output buffer which will write data to an output
Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java Wed May 1 14:23:55 2013
@@ -150,11 +150,6 @@ public class InternalNioOutputBuffer ext
// --------------------------------------------------------- Public Methods
- @Override
- public boolean supportsNonBlocking() {
- return true;
- }
-
/**
* Flush the response.
*
@@ -329,6 +324,7 @@ public class InternalNioOutputBuffer ext
/**
* Callback to write data from the buffer.
*/
+ @Override
protected boolean flushBuffer(boolean block) throws IOException {
//prevent timeout for async,
@@ -420,14 +416,17 @@ public class InternalNioOutputBuffer ext
}
}
- //----------------------------------------non blocking writes -----------------
+
+ //------------------------------------------------------ Non-blocking writes
+
+ @Override
public void setBlocking(boolean blocking) {
this.blocking = blocking;
if (blocking)
bufferedWrite = null;
else
bufferedWrite = new LinkedBlockingDeque<>();
-}
+ }
public void setBufferedWriteSize(int bufferedWriteSize) {
this.bufferedWriteSize = bufferedWriteSize;
@@ -448,6 +447,7 @@ public class InternalNioOutputBuffer ext
return result;
}
+ @Override
public boolean hasDataToWrite() {
return hasMoreDataToFlush() || hasBufferedData();
}
@@ -455,8 +455,4 @@ public class InternalNioOutputBuffer ext
public int getBufferedWriteSize() {
return bufferedWriteSize;
}
-
- public boolean isReady() {
- return !hasDataToWrite();
- }
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalOutputBuffer.java?rev=1478017&r1=1478016&r2=1478017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalOutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalOutputBuffer.java Wed May 1 14:23:55 2013
@@ -81,6 +81,7 @@ public class InternalOutputBuffer extend
/**
* Set the socket buffer size.
*/
+ @Override
public void setSocketBuffer(int socketBufferSize) {
if (socketBufferSize > 500) {
@@ -89,18 +90,12 @@ public class InternalOutputBuffer extend
} else {
useSocketBuffer = false;
}
-
}
// --------------------------------------------------------- Public Methods
@Override
- public boolean supportsNonBlocking() {
- return false;
- }
-
- @Override
public void init(SocketWrapper<Socket> socketWrapper,
AbstractEndpoint endpoint) throws IOException {
@@ -222,9 +217,30 @@ public class InternalOutputBuffer extend
}
- // ----------------------------------- OutputStreamOutputBuffer Inner Class
+ //------------------------------------------------------ Non-blocking writes
+
+ @Override
+ protected boolean hasDataToWrite() {
+ // TODO
+ return false;
+ }
+ @Override
+ protected void setBlocking(boolean blocking) {
+ // TODO
+ }
+
+
+ @Override
+ protected boolean flushBuffer(boolean block) throws IOException {
+ // TODO
+ return false;
+ }
+
+
+ // ----------------------------------- OutputStreamOutputBuffer Inner Class
+
/**
* This class is an output buffer which will write data to an output
* stream.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org