Author: markt Date: Mon Dec 14 20:58:57 2015 New Revision: 1720013 URL: http://svn.apache.org/viewvc?rev=1720013&view=rev Log: Simplify various SocketEvent values in to the single value ERROR which represents an error on a non-container thread.
Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java tomcat/trunk/java/org/apache/coyote/Adapter.java tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorBase.java tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties tomcat/trunk/java/org/apache/tomcat/util/net/SocketEvent.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Mon Dec 14 20:58:57 2015 @@ -157,22 +157,24 @@ public class CoyoteAdapter implements Ad if (!asyncConImpl.timeout()) { asyncConImpl.setErrorState(null, false); } - } else if (status==SocketEvent.ASYNC_WRITE_ERROR) { - // A async write error is an IO error which means the socket - // needs to be closed so set success to false to trigger a - // close + } else if (status==SocketEvent.ERROR) { + // An I/O error occurred on a non-container thread which means + // that the socket needs to be closed so set success to false to + // trigger a close success = false; - Throwable t = (Throwable)req.getAttribute( - RequestDispatcher.ERROR_EXCEPTION); + Throwable t = (Throwable)req.getAttribute(RequestDispatcher.ERROR_EXCEPTION); req.getAttributes().remove(RequestDispatcher.ERROR_EXCEPTION); - if (res.getWriteListener() != null) { - ClassLoader oldCL = null; - try { - oldCL = request.getContext().bind(false, null); + ClassLoader oldCL = null; + try { + oldCL = request.getContext().bind(false, null); + if (req.getReadListener() != null) { + req.getReadListener().onError(t); + } + if (res.getWriteListener() != null) { res.getWriteListener().onError(t); - } finally { - request.getContext().unbind(false, oldCL); } + } finally { + request.getContext().unbind(false, oldCL); } if (t != null) { asyncConImpl.setErrorState(t, true); @@ -394,34 +396,6 @@ public class CoyoteAdapter implements Ad } - @Override - public void errorDispatch(org.apache.coyote.Request req, - org.apache.coyote.Response res) { - Request request = (Request) req.getNote(ADAPTER_NOTES); - Response response = (Response) res.getNote(ADAPTER_NOTES); - - if (request != null && request.getMappingData().context != null) { - request.getMappingData().context.logAccess( - request, response, - System.currentTimeMillis() - req.getStartTime(), - false); - } else { - log(req, res, System.currentTimeMillis() - req.getStartTime()); - } - - if (request != null) { - request.recycle(); - } - - if (response != null) { - response.recycle(); - } - - req.recycle(); - res.recycle(); - } - - @Override public void log(org.apache.coyote.Request req, org.apache.coyote.Response res, long time) { Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Mon Dec 14 20:58:57 2015 @@ -97,7 +97,7 @@ public abstract class AbstractProcessor response.setStatus(500); } getLog().info(sm.getString("abstractProcessor.nonContainerThreadError"), t); - socketWrapper.processSocket(SocketEvent.CLOSE_NOW, true); + socketWrapper.processSocket(SocketEvent.ERROR, true); } } @@ -174,11 +174,6 @@ public abstract class AbstractProcessor return asyncStateMachine.asyncPostProcess(); } - @Override - public void errorDispatch() { - getAdapter().errorDispatch(request, response); - } - @Override public final SocketState dispatch(SocketEvent status) { @@ -193,7 +188,7 @@ public abstract class AbstractProcessor if (getLog().isDebugEnabled()) { getLog().debug("Unable to write async data.", ioe); } - status = SocketEvent.ASYNC_WRITE_ERROR; + status = SocketEvent.ERROR; request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, ioe); } } else if (status == SocketEvent.OPEN_READ && request.getReadListener() != null) { Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java (original) +++ tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java Mon Dec 14 20:58:57 2015 @@ -44,10 +44,7 @@ public abstract class AbstractProcessorL SocketState state = SocketState.CLOSED; Iterator<DispatchType> dispatches = null; do { - if (status == SocketEvent.CLOSE_NOW) { - errorDispatch(); - state = SocketState.CLOSED; - } else if (dispatches != null) { + if (dispatches != null) { DispatchType nextDispatch = dispatches.next(); state = dispatch(nextDispatch.getSocketStatus()); } else if (status == SocketEvent.DISCONNECT) { @@ -152,7 +149,5 @@ public abstract class AbstractProcessorL protected abstract SocketState asyncPostProcess(); - protected abstract void errorDispatch(); - protected abstract Log getLog(); } Modified: tomcat/trunk/java/org/apache/coyote/Adapter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Adapter.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/Adapter.java (original) +++ tomcat/trunk/java/org/apache/coyote/Adapter.java Mon Dec 14 20:58:57 2015 @@ -66,8 +66,6 @@ public interface Adapter { public boolean asyncDispatch(Request req,Response res, SocketEvent status) throws Exception; - public void errorDispatch(Request request, Response response); - public void log(Request req, Response res, long time); /** 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=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java Mon Dec 14 20:58:57 2015 @@ -716,7 +716,7 @@ public class Http11InputBuffer implement private boolean fill(boolean block) throws IOException { if (parsingHeader) { - if (lastValid > headerBufferSize) { + if (lastValid >= headerBufferSize) { throw new IllegalArgumentException (sm.getString("iib.requestheadertoolarge.error")); } Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorBase.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorBase.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorBase.java Mon Dec 14 20:58:57 2015 @@ -69,12 +69,6 @@ public abstract class UpgradeProcessorBa @Override - public void errorDispatch() { - // NO-OP - } - - - @Override public final SocketState asyncPostProcess() { return null; } Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Mon Dec 14 20:58:57 2015 @@ -319,19 +319,10 @@ public class Http2UpgradeHandler extends result = SocketState.UPGRADED; break; - case ASYNC_WRITE_ERROR: - case CLOSE_NOW: - // This should never happen and will be fatal for this connection. - // Add the exception to trace how this point was reached. - log.error(sm.getString("upgradeHandler.unexpectedStatus", status), - new IllegalStateException()); - //$FALL-THROUGH$ case DISCONNECT: case ERROR: case TIMEOUT: case STOP: - // For all of the above, including the unexpected values, close the - // connection. close(); break; } 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=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Mon Dec 14 20:58:57 2015 @@ -118,7 +118,6 @@ upgradeHandler.stream.old=A new remote s upgradeHandler.tooManyRemoteStreams=The client attempted to use more than [{0}] active streams upgradeHandler.unexpectedAck=Connection [{0}], Stream [{1}], A settings acknowledgement was received when not expected upgradeHandler.unexpectedEos=Unexpected end of stream -upgradeHandler.unexpectedStatus=An unexpected value of status ([{0}]) was passed to this method upgradeHandler.upgrade=Connection [{0}], HTTP/1.1 upgrade to stream [1] upgradeHandler.upgrade.fail=Connection [{0}], HTTP/1.1 upgrade failed upgradeHandler.upgradeDispatch.entry=Entry, Connection [{0}], SocketStatus [{1}] Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketEvent.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketEvent.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SocketEvent.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketEvent.java Mon Dec 14 20:58:57 2015 @@ -51,25 +51,14 @@ public enum SocketEvent { DISCONNECT, /** - * An error has occurred that does not had a dedicated event type. Currently - * this is only used by NIO2 to signal the failure of a completion handler. + * An error has occurred on a non-container thread and processing needs to + * return to the container for any necessary clean-up. Examples of where + * this is used include: + * <ul> + * <li>by NIO2 to signal the failure of a completion handler</li> + * <li>by the container to signal an I/O error on a non-container thread + * during Servlet 3.0 asynchronous processing.</li> + * </ul> */ - ERROR, - - /** - * Used internally by the container to signal that an I/O occurred during an - * asynchronous read. - * - * TODO: Given how this is used, it is possible to refactor the processing - * so this enum value is not required? - */ - ASYNC_WRITE_ERROR, - - /** - * Initiated by the container when an I/O error is detected on a - * non-container thread. - * - * TODO: Can this be combined with / replaced by ERROR? - */ - CLOSE_NOW + ERROR } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java Mon Dec 14 20:58:57 2015 @@ -179,8 +179,6 @@ public class WsHttpUpgradeHandler implem wsSession.doClose(new CloseReason(CloseCodes.GOING_AWAY, msg), new CloseReason(CloseCodes.CLOSED_ABNORMALLY, msg)); //$FALL-THROUGH$ - case ASYNC_WRITE_ERROR: - case CLOSE_NOW: case DISCONNECT: case TIMEOUT: return SocketState.CLOSED; Modified: tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java?rev=1720013&r1=1720012&r2=1720013&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java (original) +++ tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java Mon Dec 14 20:58:57 2015 @@ -245,8 +245,6 @@ public class TestUpgradeInternalHandler case OPEN_WRITE: break; case STOP: - case ASYNC_WRITE_ERROR: - case CLOSE_NOW: case DISCONNECT: case ERROR: case TIMEOUT: --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org