Author: markt
Date: Tue Oct 20 09:01:20 2015
New Revision: 1709546
URL: http://svn.apache.org/viewvc?rev=1709546&view=rev
Log:
Pull up comment processing code
Modified:
tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java
tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
tomcat/trunk/java/org/apache/coyote/Processor.java
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.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=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Tue Oct 20
09:01:20 2015
@@ -22,7 +22,6 @@ import java.util.concurrent.Executor;
import javax.servlet.RequestDispatcher;
-import org.apache.juli.logging.Log;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
@@ -280,6 +279,4 @@ public abstract class AbstractProcessor
* current request has completed
*/
protected abstract SocketState dispatchEndRequest();
-
- protected abstract Log getLog();
}
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java Tue Oct 20
09:01:20 2015
@@ -22,7 +22,9 @@ import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
+import org.apache.juli.logging.Log;
import org.apache.tomcat.util.net.DispatchType;
+import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.SocketWrapperBase;
/**
@@ -36,9 +38,62 @@ public abstract class AbstractProcessorL
@Override
- public SocketState process(SocketWrapperBase<?> socketWrapper) throws
IOException {
- // TODO Auto-generated method stub
- return null;
+ public SocketState process(SocketWrapperBase<?> socketWrapper,
SocketStatus status)
+ throws IOException {
+
+ SocketState state = SocketState.CLOSED;
+ Iterator<DispatchType> dispatches = null;
+ do {
+ if (status == SocketStatus.CLOSE_NOW) {
+ errorDispatch();
+ state = SocketState.CLOSED;
+ } else if (dispatches != null) {
+ DispatchType nextDispatch = dispatches.next();
+ state = dispatch(nextDispatch.getSocketStatus());
+ } else if (status == SocketStatus.DISCONNECT) {
+ // Do nothing here, just wait for it to get recycled
+ } else if (isAsync() || isUpgrade()) {
+ state = dispatch(status);
+ } else if (state == SocketState.ASYNC_END) {
+ state = dispatch(status);
+ // TODO: In case this request takes a long time to process
+ // remove the TBD (socket/processor/something else) from
+ // the waiting requests now else the async timeout will
+ // fire
+ if (state == SocketState.OPEN) {
+ // There may be pipe-lined data to read. If the data
+ // isn't processed now, execution will exit this
+ // loop and call release() which will recycle the
+ // processor (and input buffer) deleting any
+ // pipe-lined data. To avoid this, process it now.
+ state = service(socketWrapper);
+ }
+ } else if (status == SocketStatus.OPEN_WRITE) {
+ // Extra write event likely after async, ignore
+ state = SocketState.LONG;
+ } else {
+ state = service(socketWrapper);
+ }
+
+ if (state != SocketState.CLOSED && isAsync()) {
+ state = asyncPostProcess();
+ }
+
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("Socket: [" + socketWrapper +
+ "], Status in: [" + status +
+ "], State out: [" + state + "]");
+ }
+
+ if (dispatches == null || !dispatches.hasNext()) {
+ // Only returns non-null iterator if there are
+ // dispatches to process.
+ dispatches = getIteratorAndClearDispatches();
+ }
+ } while (state == SocketState.ASYNC_END ||
+ dispatches != null && state != SocketState.CLOSED);
+
+ return state;
}
@@ -75,4 +130,7 @@ public abstract class AbstractProcessorL
dispatches.clear();
}
}
+
+
+ protected abstract Log getLog();
}
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Tue Oct 20
09:01:20 2015
@@ -19,7 +19,6 @@ package org.apache.coyote;
import java.io.IOException;
import java.net.InetAddress;
import java.nio.ByteBuffer;
-import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger;
@@ -40,7 +39,6 @@ import org.apache.tomcat.util.collection
import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler;
-import org.apache.tomcat.util.net.DispatchType;
import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.SocketWrapperBase;
import org.apache.tomcat.util.res.StringManager;
@@ -631,8 +629,7 @@ public abstract class AbstractProtocol<S
@Override
- public SocketState process(SocketWrapperBase<S> wrapper,
- SocketStatus status) {
+ public SocketState process(SocketWrapperBase<S> wrapper, SocketStatus
status) {
if (wrapper == null) {
// Nothing to do. Socket has been closed.
return SocketState.CLOSED;
@@ -685,52 +682,16 @@ public abstract class AbstractProtocol<S
processor.setSslSupport(
wrapper.getSslSupport(getProtocol().getClientCertProvider()));
+ // Associate the processor with the connection
+ connections.put(socket, processor);
+
SocketState state = SocketState.CLOSED;
- Iterator<DispatchType> dispatches = null;
do {
- if (status == SocketStatus.CLOSE_NOW) {
- processor.errorDispatch();
- state = SocketState.CLOSED;
- } else if (dispatches != null) {
- // Associate the processor with the connection as
- // these calls may result in a nested call to process()
- connections.put(socket, processor);
- DispatchType nextDispatch = dispatches.next();
- state =
processor.dispatch(nextDispatch.getSocketStatus());
- } else if (status == SocketStatus.DISCONNECT) {
- // Do nothing here, just wait for it to get recycled
- } else if (processor.isAsync() || processor.isUpgrade()) {
- state = processor.dispatch(status);
- } else if (state == SocketState.ASYNC_END) {
- state = processor.dispatch(status);
- // release() won't get called so in case this request
- // takes a long time to process remove the socket from
- // the waiting requests now else the async timeout will
- // fire
-
getProtocol().getEndpoint().removeWaitingRequest(wrapper);
- if (state == SocketState.OPEN) {
- // There may be pipe-lined data to read. If the
data
- // isn't processed now, execution will exit this
- // loop and call release() which will recycle the
- // processor (and input buffer) deleting any
- // pipe-lined data. To avoid this, process it now.
- state = processor.service(wrapper);
- }
- } else if (status == SocketStatus.OPEN_WRITE) {
- // Extra write event likely after async, ignore
- state = SocketState.LONG;
- } else {
- state = processor.service(wrapper);
- }
-
- if (state != SocketState.CLOSED && processor.isAsync()) {
- state = processor.asyncPostProcess();
- }
+ state = processor.process(wrapper, status);
if (state == SocketState.UPGRADING) {
// Get the HTTP upgrade handler
- HttpUpgradeHandler httpUpgradeHandler =
- processor.getHttpUpgradeHandler();
+ HttpUpgradeHandler httpUpgradeHandler =
processor.getHttpUpgradeHandler();
// Retrieve leftover input
ByteBuffer leftoverInput =
processor.getLeftoverInput();
// Release the Http11 processor to be re-used
@@ -750,19 +711,7 @@ public abstract class AbstractProtocol<S
// it.
httpUpgradeHandler.init((WebConnection) processor);
}
- if (getLog().isDebugEnabled()) {
- getLog().debug("Socket: [" + wrapper +
- "], Status in: [" + status +
- "], State out: [" + state + "]");
- }
- if (dispatches == null || !dispatches.hasNext()) {
- // Only returns non-null iterator if there are
- // dispatches to process.
- dispatches = processor.getIteratorAndClearDispatches();
- }
- } while (state == SocketState.ASYNC_END ||
- state == SocketState.UPGRADING ||
- dispatches != null && state != SocketState.CLOSED);
+ } while ( state == SocketState.UPGRADING);
if (state == SocketState.LONG) {
// In the middle of processing a request/response. Keep the
@@ -823,8 +772,7 @@ public abstract class AbstractProtocol<S
// any other exception or error is odd. Here we log it
// with "ERROR" level, so it will show up even on
// less-than-verbose logs.
- getLog().error(
- sm.getString("abstractConnectionHandler.error"), e);
+
getLog().error(sm.getString("abstractConnectionHandler.error"), e);
} finally {
ContainerThreadMarker.clear();
}
Modified: tomcat/trunk/java/org/apache/coyote/Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Processor.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/Processor.java Tue Oct 20 09:01:20 2015
@@ -43,6 +43,8 @@ public interface Processor {
* not currently being processed.
*
* @param socketWrapper The connection to process
+ * @param status The status of the connection that triggered this
additional
+ * processing
*
* @return The state the caller should put the socket in when this method
* returns
@@ -50,7 +52,7 @@ public interface Processor {
* @throws IOException If an I/O error occurs during the processing of the
* request
*/
- SocketState process(SocketWrapperBase<?> socketWrapper) throws IOException;
+ SocketState process(SocketWrapperBase<?> socketWrapper, SocketStatus
status) throws IOException;
/**
* Service a 'standard' HTTP request. This method is called for both new
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
(original)
+++
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
Tue Oct 20 09:01:20 2015
@@ -55,6 +55,12 @@ public class UpgradeProcessorExternal ex
}
+ @Override
+ protected Log getLog() {
+ return log;
+ }
+
+
// --------------------------------------------------- AutoCloseable
methods
@Override
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
(original)
+++
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
Tue Oct 20 09:01:20 2015
@@ -23,12 +23,16 @@ import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.SocketWrapperBase;
public class UpgradeProcessorInternal extends UpgradeProcessorBase {
+ private static final Log log =
LogFactory.getLog(UpgradeProcessorInternal.class);
+
private final InternalHttpUpgradeHandler internalHttpUpgradeHandler;
public UpgradeProcessorInternal(SocketWrapperBase<?> wrapper, ByteBuffer
leftOverInput,
@@ -63,6 +67,12 @@ public class UpgradeProcessorInternal ex
}
+ @Override
+ protected Log getLog() {
+ return log;
+ }
+
+
// --------------------------------------------------- AutoCloseable
methods
@Override
Modified: tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Tue Oct
20 09:01:20 2015
@@ -77,8 +77,6 @@ stream.outputBuffer.flush.debug=Connecti
streamProcessor.error.connection=Connection [{0}], Stream [{1}], An error
occurred during processing that was fatal to the connection
streamProcessor.error.stream=Connection [{0}], Stream [{1}], An error occurred
during processing that was fatal to the stream
streamProcessor.httpupgrade.notsupported=HTTP upgrade is not supported within
HTTP/2 streams
-streamProcessor.process.loopend=Connection [{0}], Stream [{1}], loop end,
state [{2}], dispatches [{3}]
-streamProcessor.process.loopstart=Connection [{0}], Stream [{1}], loop start,
status [{2}], dispatches [{3}]
streamProcessor.ssl.error=Unable to retrieve SSL request attributes
streamStateMachine.debug.change=Connection [{0}], Stream [{1}], State changed
from [{2}] to [{3}]
Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Tue Oct 20
09:01:20 2015
@@ -18,7 +18,6 @@ package org.apache.coyote.http2;
import java.io.IOException;
import java.nio.ByteBuffer;
-import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.servlet.http.HttpUpgradeHandler;
@@ -60,51 +59,12 @@ public class StreamProcessor extends Abs
@Override
public synchronized void run() {
- SocketStatus status = SocketStatus.OPEN_READ;
-
// HTTP/2 equivalent of AbstractConnectionHandler#process() without the
// socket <-> processor mapping
ContainerThreadMarker.set();
SocketState state = SocketState.CLOSED;
try {
- Iterator<DispatchType> dispatches =
getIteratorAndClearDispatches();
- do {
- if (log.isDebugEnabled()) {
- log.debug(sm.getString("streamProcessor.process.loopstart",
- stream.getConnectionId(), stream.getIdentifier(),
status, dispatches));
- }
- if (status == SocketStatus.CLOSE_NOW) {
- setErrorState(ErrorState.CLOSE_NOW, null);
- state = SocketState.CLOSED;
- } else if (dispatches != null) {
- DispatchType nextDispatch = dispatches.next();
- state = dispatch(nextDispatch.getSocketStatus());
- } else if (isAsync()) {
- state = dispatch(status);
- } else if (state == SocketState.ASYNC_END) {
- state = dispatch(status);
- } else if (status == SocketStatus.DISCONNECT) {
- // Should never happen
- throw new IllegalStateException();
- } else {
- state = service((SocketWrapperBase<?>) null);
- }
-
- if (state != SocketState.CLOSED && isAsync()) {
- state = asyncStateMachine.asyncPostProcess();
- }
-
- if (dispatches == null || !dispatches.hasNext()) {
- // Only returns non-null iterator if there are
- // dispatches to process.
- dispatches = getIteratorAndClearDispatches();
- }
- if (log.isDebugEnabled()) {
- log.debug(sm.getString("streamProcessor.process.loopend",
- stream.getConnectionId(), stream.getIdentifier(),
state, dispatches));
- }
- } while (state == SocketState.ASYNC_END ||
- dispatches != null && state != SocketState.CLOSED);
+ state = process(socketWrapper, SocketStatus.OPEN_READ);
if (state == SocketState.CLOSED) {
if (!getErrorState().isConnectionIoAllowed()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]