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

Reply via email to