Author: markt Date: Tue Sep 29 22:05:19 2015 New Revision: 1705939 URL: http://svn.apache.org/viewvc?rev=1705939&view=rev Log: Pull-up common dispatch() method
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java 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=1705939&r1=1705938&r2=1705939&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Tue Sep 29 22:05:19 2015 @@ -17,11 +17,14 @@ package org.apache.coyote; import java.io.IOException; +import java.io.InterruptedIOException; import java.util.concurrent.Executor; +import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpUpgradeHandler; 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; import org.apache.tomcat.util.net.SocketStatus; @@ -219,6 +222,7 @@ public abstract class AbstractProcessor @Override public abstract SocketState process(SocketWrapperBase<?> socket) throws IOException; + /** * Process an in-progress request that is not longer in standard HTTP mode. * Uses currently include Servlet 3.0 Async and HTTP upgrade connections. @@ -226,7 +230,52 @@ public abstract class AbstractProcessor * HTTP requests. */ @Override - public abstract SocketState dispatch(SocketStatus status); + public final SocketState dispatch(SocketStatus status) { + + if (status == SocketStatus.OPEN_WRITE && response.getWriteListener() != null) { + asyncStateMachine.asyncOperation(); + try { + if (flushBufferedWrite()) { + return SocketState.LONG; + } + } catch (IOException ioe) { + if (getLog().isDebugEnabled()) { + getLog().debug("Unable to write async data.", ioe); + } + status = SocketStatus.ASYNC_WRITE_ERROR; + request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, ioe); + } + } else if (status == SocketStatus.OPEN_READ && request.getReadListener() != null) { + dispatchNonBlockingRead(); + } + + RequestInfo rp = request.getRequestProcessor(); + try { + rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE); + if (!getAdapter().asyncDispatch(request, response, status)) { + setErrorState(ErrorState.CLOSE_NOW, null); + } + } catch (InterruptedIOException e) { + setErrorState(ErrorState.CLOSE_NOW, e); + } catch (Throwable t) { + ExceptionUtils.handleThrowable(t); + setErrorState(ErrorState.CLOSE_NOW, t); + getLog().error(sm.getString("http11processor.request.process"), t); + } + + rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); + + if (getErrorState().isError()) { + request.updateCounters(); + return SocketState.CLOSED; + } else if (isAsync()) { + return SocketState.LONG; + } else { + request.updateCounters(); + return dispatchEndRequest(); + } + } + /** * Flush any pending writes. Used during non-blocking writes to flush any Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1705939&r1=1705938&r2=1705939&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Tue Sep 29 22:05:19 2015 @@ -27,7 +27,6 @@ import java.security.cert.CertificateFac import java.security.cert.X509Certificate; import java.util.concurrent.atomic.AtomicBoolean; -import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpUpgradeHandler; @@ -616,54 +615,6 @@ public class AjpProcessor extends Abstra } } - - @Override - public SocketState dispatch(SocketStatus status) { - - if (status == SocketStatus.OPEN_WRITE && response.getWriteListener() != null) { - asyncStateMachine.asyncOperation(); - try { - if (flushBufferedWrite()) { - return SocketState.LONG; - } - } catch (IOException ioe) { - if (getLog().isDebugEnabled()) { - getLog().debug("Unable to write async data.", ioe); - } - status = SocketStatus.ASYNC_WRITE_ERROR; - request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, ioe); - } - } else if (status == SocketStatus.OPEN_READ && request.getReadListener() != null) { - dispatchNonBlockingRead(); - } - - RequestInfo rp = request.getRequestProcessor(); - try { - rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE); - if (!getAdapter().asyncDispatch(request, response, status)) { - setErrorState(ErrorState.CLOSE_NOW, null); - } - } catch (InterruptedIOException e) { - setErrorState(ErrorState.CLOSE_NOW, e); - } catch (Throwable t) { - ExceptionUtils.handleThrowable(t); - setErrorState(ErrorState.CLOSE_NOW, t); - getLog().error(sm.getString("http11processor.request.process"), t); - } - - rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); - - if (getErrorState().isError()) { - request.updateCounters(); - return SocketState.CLOSED; - } else if (isAsync()) { - return SocketState.LONG; - } else { - request.updateCounters(); - return dispatchEndRequest(); - } - } - @Override protected boolean flushBufferedWrite() throws IOException { 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=1705939&r1=1705938&r2=1705939&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Tue Sep 29 22:05:19 2015 @@ -26,7 +26,6 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; -import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpUpgradeHandler; @@ -1694,54 +1693,6 @@ public class Http11Processor extends Abs } - @Override - public SocketState dispatch(SocketStatus status) { - - if (status == SocketStatus.OPEN_WRITE && response.getWriteListener() != null) { - asyncStateMachine.asyncOperation(); - try { - if (flushBufferedWrite()) { - return SocketState.LONG; - } - } catch (IOException ioe) { - if (getLog().isDebugEnabled()) { - getLog().debug("Unable to write async data.", ioe); - } - status = SocketStatus.ASYNC_WRITE_ERROR; - request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, ioe); - } - } else if (status == SocketStatus.OPEN_READ && request.getReadListener() != null) { - dispatchNonBlockingRead(); - } - - RequestInfo rp = request.getRequestProcessor(); - try { - rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE); - if (!getAdapter().asyncDispatch(request, response, status)) { - setErrorState(ErrorState.CLOSE_NOW, null); - } - } catch (InterruptedIOException e) { - setErrorState(ErrorState.CLOSE_NOW, e); - } catch (Throwable t) { - ExceptionUtils.handleThrowable(t); - setErrorState(ErrorState.CLOSE_NOW, t); - getLog().error(sm.getString("http11processor.request.process"), t); - } - - rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); - - if (getErrorState().isError()) { - request.updateCounters(); - return SocketState.CLOSED; - } else if (isAsync()) { - return SocketState.LONG; - } else { - request.updateCounters(); - return dispatchEndRequest(); - } - } - - @Override protected boolean flushBufferedWrite() throws IOException { if (outputBuffer.hasDataToWrite()) { 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=1705939&r1=1705938&r2=1705939&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Tue Sep 29 22:05:19 2015 @@ -17,14 +17,12 @@ package org.apache.coyote.http2; import java.io.IOException; -import java.io.InterruptedIOException; import java.nio.ByteBuffer; import java.util.Iterator; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicBoolean; -import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpUpgradeHandler; import org.apache.coyote.AbstractProcessor; @@ -33,10 +31,8 @@ import org.apache.coyote.Adapter; import org.apache.coyote.AsyncContextCallback; import org.apache.coyote.ContainerThreadMarker; import org.apache.coyote.ErrorState; -import org.apache.coyote.RequestInfo; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; -import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; import org.apache.tomcat.util.net.DispatchType; import org.apache.tomcat.util.net.SSLSupport; @@ -399,54 +395,6 @@ public class StreamProcessor extends Abs } } - - @Override - public SocketState dispatch(SocketStatus status) { - - if (status == SocketStatus.OPEN_WRITE && response.getWriteListener() != null) { - asyncStateMachine.asyncOperation(); - try { - if (flushBufferedWrite()) { - return SocketState.LONG; - } - } catch (IOException ioe) { - if (getLog().isDebugEnabled()) { - getLog().debug("Unable to write async data.", ioe); - } - status = SocketStatus.ASYNC_WRITE_ERROR; - request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, ioe); - } - } else if (status == SocketStatus.OPEN_READ && request.getReadListener() != null) { - dispatchNonBlockingRead(); - } - - RequestInfo rp = request.getRequestProcessor(); - try { - rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE); - if (!getAdapter().asyncDispatch(request, response, status)) { - setErrorState(ErrorState.CLOSE_NOW, null); - } - } catch (InterruptedIOException e) { - setErrorState(ErrorState.CLOSE_NOW, e); - } catch (Throwable t) { - ExceptionUtils.handleThrowable(t); - setErrorState(ErrorState.CLOSE_NOW, t); - getLog().error(sm.getString("http11processor.request.process"), t); - } - - rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); - - if (getErrorState().isError()) { - request.updateCounters(); - return SocketState.CLOSED; - } else if (isAsync()) { - return SocketState.LONG; - } else { - request.updateCounters(); - return dispatchEndRequest(); - } - } - @Override protected boolean flushBufferedWrite() throws IOException { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org