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: [email protected]
For additional commands, e-mail: [email protected]