You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/11/04 12:54:59 UTC
svn commit: r1636547 [2/2] - in /tomcat/trunk: ./ conf/
java/org/apache/catalina/ java/org/apache/catalina/comet/
java/org/apache/catalina/connector/ java/org/apache/catalina/core/
java/org/apache/catalina/filters/ java/org/apache/catalina/valves/ java...
Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Tue Nov 4 11:54:58 2014
@@ -150,12 +150,6 @@ public abstract class AbstractHttp11Proc
/**
- * Comet used.
- */
- protected boolean comet = false;
-
-
- /**
* Regular expression that defines the restricted user agents.
*/
protected Pattern restrictedUserAgents = null;
@@ -976,7 +970,6 @@ public abstract class AbstractHttp11Proc
// Flags
keepAlive = true;
- comet = false;
openSocket = false;
sendfileInProgress = false;
readComplete = true;
@@ -990,7 +983,7 @@ public abstract class AbstractHttp11Proc
socketWrapper.setKeepAliveLeft(0);
}
- while (!getErrorState().isError() && keepAlive && !comet && !isAsync() &&
+ while (!getErrorState().isError() && keepAlive && !isAsync() &&
httpUpgradeHandler == null && !endpoint.isPaused()) {
// Parsing the request header
@@ -1095,7 +1088,6 @@ public abstract class AbstractHttp11Proc
statusDropsConnection(response.getStatus())))) {
setErrorState(ErrorState.CLOSE_CLEAN, null);
}
- setCometTimeouts(socketWrapper);
} catch (InterruptedIOException e) {
setErrorState(ErrorState.CLOSE_NOW, e);
} catch (HeadersTooLargeException e) {
@@ -1123,7 +1115,7 @@ public abstract class AbstractHttp11Proc
// Finish the handling of the request
rp.setStage(org.apache.coyote.Constants.STAGE_ENDINPUT);
- if (!isAsync() && !comet) {
+ if (!isAsync()) {
if (getErrorState().isError()) {
// If we know we are closing the connection, don't drain
// input. This way uploading a 100GB file doesn't tie up the
@@ -1152,7 +1144,7 @@ public abstract class AbstractHttp11Proc
}
request.updateCounters();
- if (!isAsync() && !comet || getErrorState().isError()) {
+ if (!isAsync() || getErrorState().isError()) {
if (getErrorState().isIoAllowed()) {
getInputBuffer().nextRequest();
getOutputBuffer().nextRequest();
@@ -1178,7 +1170,7 @@ public abstract class AbstractHttp11Proc
if (getErrorState().isError() || endpoint.isPaused()) {
return SocketState.CLOSED;
- } else if (isAsync() || comet) {
+ } else if (isAsync()) {
return SocketState.LONG;
} else if (isUpgrade()) {
return SocketState.UPGRADING;
@@ -1711,12 +1703,6 @@ public abstract class AbstractHttp11Proc
@Override
- public boolean isComet() {
- return comet;
- }
-
-
- @Override
public boolean isUpgrade() {
return httpUpgradeHandler != null;
}
@@ -1745,12 +1731,6 @@ public abstract class AbstractHttp11Proc
protected abstract void resetTimeouts();
- /**
- * Provides a mechanism for those connectors (currently only NIO) that need
- * that need to set comet timeouts.
- */
- protected abstract void setCometTimeouts(SocketWrapper<S> socketWrapper);
-
public void endRequest() {
// Finish the handling of the request
@@ -1807,7 +1787,6 @@ public abstract class AbstractHttp11Proc
asyncStateMachine.recycle();
}
httpUpgradeHandler = null;
- comet = false;
resetErrorState();
recycleInternal();
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Tue Nov 4 11:54:58 2014
@@ -18,13 +18,11 @@ package org.apache.coyote.http11;
import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.InterruptedIOException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import org.apache.coyote.ActionCode;
import org.apache.coyote.ErrorState;
-import org.apache.coyote.RequestInfo;
import org.apache.coyote.http11.filters.BufferedInputFilter;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -33,11 +31,8 @@ import org.apache.tomcat.jni.SSL;
import org.apache.tomcat.jni.SSLSocket;
import org.apache.tomcat.jni.Sockaddr;
import org.apache.tomcat.jni.Socket;
-import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.AprEndpoint;
import org.apache.tomcat.util.net.SSLSupport;
-import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.SocketWrapper;
@@ -98,47 +93,6 @@ public class Http11AprProcessor extends
// --------------------------------------------------------- Public Methods
- /**
- * Process pipelined HTTP requests using the specified input and output
- * streams.
- *
- * @throws IOException error during an I/O operation
- */
- @Override
- public SocketState event(SocketStatus status)
- throws IOException {
-
- RequestInfo rp = request.getRequestProcessor();
-
- try {
- rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
- if (!getAdapter().event(request, response, status)) {
- setErrorState(ErrorState.CLOSE_NOW, null);
- }
- } catch (InterruptedIOException e) {
- setErrorState(ErrorState.CLOSE_NOW, e);
- } catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
- // 500 - Internal Server Error
- response.setStatus(500);
- setErrorState(ErrorState.CLOSE_NOW, t);
- getAdapter().log(request, response, 0);
- log.error(sm.getString("http11processor.request.process"), t);
- }
-
- rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
-
- if (getErrorState().isError() || status==SocketStatus.STOP) {
- return SocketState.CLOSED;
- } else if (!comet) {
- inputBuffer.nextRequest();
- outputBuffer.nextRequest();
- return SocketState.OPEN;
- } else {
- return SocketState.LONG;
- }
- }
-
@Override
protected boolean disableKeepAlive() {
return false;
@@ -186,12 +140,6 @@ public class Http11AprProcessor extends
@Override
- protected void setCometTimeouts(SocketWrapper<Long> socketWrapper) {
- // NO-OP for APR/native
- }
-
-
- @Override
protected boolean breakKeepAliveLoop(SocketWrapper<Long> socketWrapper) {
openSocket = keepAlive;
// Do sendfile as needed: add socket to sendfile and end
@@ -455,23 +403,6 @@ public class Http11AprProcessor extends
}
break;
}
- case COMET_BEGIN: {
- comet = true;
- break;
- }
- case COMET_END: {
- comet = false;
- break;
- }
- case COMET_CLOSE: {
- ((AprEndpoint)endpoint).processSocket(this.socketWrapper,
- SocketStatus.OPEN_READ, true);
- break;
- }
- case COMET_SETTIMEOUT: {
- //no op
- break;
- }
}
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Tue Nov 4 11:54:58 2014
@@ -266,7 +266,7 @@ public class Http11AprProtocol extends A
}
if (processor == null) {
- // if not null - this is a former comet request, handled by http11
+ // if not null - handled by http11
SocketState socketState = proto.npnHandler.process(socket, status);
// handled by npn protocol.
if (socketState == SocketState.CLOSED ||
@@ -291,19 +291,6 @@ public class Http11AprProtocol extends A
if (processor.isAsync()) {
// Async
socket.setAsync(true);
- } else if (processor.isComet()) {
- // Comet
- if (proto.endpoint.isRunning()) {
- socket.setComet(true);
- ((AprEndpoint) proto.endpoint).getPoller().add(
- socket.getSocket().longValue(),
- proto.endpoint.getSoTimeout(), true, false);
- } else {
- // Process a STOP directly
- ((AprEndpoint) proto.endpoint).processSocket(
- socket.getSocket().longValue(),
- SocketStatus.STOP);
- }
} else {
// Upgraded
Poller p = ((AprEndpoint) proto.endpoint).getPoller();
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java Tue Nov 4 11:54:58 2014
@@ -17,7 +17,6 @@
package org.apache.coyote.http11;
import java.io.IOException;
-import java.io.InterruptedIOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -25,11 +24,9 @@ import javax.net.ssl.SSLEngine;
import org.apache.coyote.ActionCode;
import org.apache.coyote.ErrorState;
-import org.apache.coyote.RequestInfo;
import org.apache.coyote.http11.filters.BufferedInputFilter;
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.Nio2Channel;
import org.apache.tomcat.util.net.Nio2Endpoint;
@@ -85,72 +82,6 @@ public class Http11Nio2Processor extends
// --------------------------------------------------------- Public Methods
@Override
- public SocketState event(SocketStatus status)
- throws IOException {
-
- long soTimeout = endpoint.getSoTimeout();
-
- RequestInfo rp = request.getRequestProcessor();
- try {
- rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
- if (!getAdapter().event(request, response, status)) {
- setErrorState(ErrorState.CLOSE_NOW, null);
- }
- if (!getErrorState().isError()) {
- if (socketWrapper != null) {
- socketWrapper.setComet(comet);
- if (comet) {
- Integer comettimeout = (Integer) request.getAttribute(
- org.apache.coyote.Constants.COMET_TIMEOUT_ATTR);
- if (comettimeout != null) {
- socketWrapper.setTimeout(comettimeout.longValue());
- }
- } else {
- //reset the timeout
- if (keepAlive) {
- socketWrapper.setTimeout(keepAliveTimeout);
- } else {
- socketWrapper.setTimeout(soTimeout);
- }
- }
-
- }
- }
- } catch (InterruptedIOException e) {
- setErrorState(ErrorState.CLOSE_NOW, e);
- } catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
- // 500 - Internal Server Error
- response.setStatus(500);
- setErrorState(ErrorState.CLOSE_NOW, t);
- getAdapter().log(request, response, 0);
- log.error(sm.getString("http11processor.request.process"), t);
- }
-
- rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
-
- if (getErrorState().isError() || status==SocketStatus.STOP) {
- return SocketState.CLOSED;
- } else if (!comet) {
- if (keepAlive) {
- inputBuffer.nextRequest();
- outputBuffer.nextRequest();
- if (((InternalNio2InputBuffer) inputBuffer).isPending()) {
- // Following comet processing, a read is still pending, so
- // keep the processor associated
- return SocketState.LONG;
- } else {
- return SocketState.OPEN;
- }
- } else {
- return SocketState.CLOSED;
- }
- } else {
- return SocketState.LONG;
- }
- }
-
- @Override
public SocketState asyncDispatch(SocketStatus status) {
SocketState state = super.asyncDispatch(status);
if (state == SocketState.OPEN && ((InternalNio2InputBuffer) inputBuffer).isPending()) {
@@ -258,21 +189,6 @@ public class Http11Nio2Processor extends
@Override
- protected void setCometTimeouts(SocketWrapper<Nio2Channel> socketWrapper) {
- if (socketWrapper != null) {
- socketWrapper.setComet(comet);
- if (comet) {
- Integer comettimeout = (Integer) request.getAttribute(
- org.apache.coyote.Constants.COMET_TIMEOUT_ATTR);
- if (comettimeout != null) {
- socketWrapper.setTimeout(comettimeout.longValue());
- }
- }
- }
- }
-
-
- @Override
protected boolean breakKeepAliveLoop(
SocketWrapper<Nio2Channel> socketWrapper) {
openSocket = keepAlive;
@@ -503,42 +419,6 @@ public class Http11Nio2Processor extends
}
break;
}
- case COMET_BEGIN: {
- comet = true;
- break;
- }
- case COMET_END: {
- comet = false;
- break;
- }
- case COMET_CLOSE: {
- if (socketWrapper == null || socketWrapper.getSocket() == null) {
- return;
- }
- RequestInfo rp = request.getRequestProcessor();
- if (rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE) {
- // Close event for this processor triggered by request
- // processing in another processor, a non-Tomcat thread (i.e.
- // an application controlled thread) or similar.
- endpoint.processSocket(this.socketWrapper, SocketStatus.OPEN_READ, true);
- }
- break;
- }
- case COMET_SETTIMEOUT: {
- if (param == null) {
- return;
- }
- if (socketWrapper == null) {
- return;
- }
- long timeout = ((Long)param).longValue();
- //if we are not piggy backing on a worker thread, set the timeout
- RequestInfo rp = request.getRequestProcessor();
- if ( rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE ) {
- socketWrapper.setTimeout(timeout);
- }
- break;
- }
}
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java Tue Nov 4 11:54:58 2014
@@ -236,7 +236,6 @@ public class Http11Nio2Protocol extends
}
} else {
// Either:
- // - this is comet request
// - this is an upgraded connection
// - the request line/headers have not been completely
// read
@@ -275,7 +274,7 @@ public class Http11Nio2Protocol extends
@Override
public void closeAll() {
for (Nio2Channel channel : connections.keySet()) {
- ((Nio2Endpoint) proto.endpoint).closeSocket(channel.getSocket(), SocketStatus.STOP);
+ ((Nio2Endpoint) proto.endpoint).closeSocket(channel.getSocket());
}
}
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Tue Nov 4 11:54:58 2014
@@ -17,7 +17,6 @@
package org.apache.coyote.http11;
import java.io.IOException;
-import java.io.InterruptedIOException;
import java.net.InetAddress;
import java.nio.channels.SelectionKey;
@@ -25,18 +24,14 @@ import javax.net.ssl.SSLEngine;
import org.apache.coyote.ActionCode;
import org.apache.coyote.ErrorState;
-import org.apache.coyote.RequestInfo;
import org.apache.coyote.http11.filters.BufferedInputFilter;
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.NioChannel;
import org.apache.tomcat.util.net.NioEndpoint;
import org.apache.tomcat.util.net.NioEndpoint.KeyAttachment;
import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.net.SecureNioChannel;
-import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.SocketWrapper;
@@ -87,73 +82,6 @@ public class Http11NioProcessor extends
// --------------------------------------------------------- Public Methods
- /**
- * Process pipelined HTTP requests using the specified input and output
- * streams.
- *
- * @throws IOException error during an I/O operation
- */
- @Override
- public SocketState event(SocketStatus status) throws IOException {
-
- long soTimeout = endpoint.getSoTimeout();
-
- RequestInfo rp = request.getRequestProcessor();
- final NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)socketWrapper.getSocket().getAttachment(false);
- try {
- rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
- if (!getAdapter().event(request, response, status)) {
- setErrorState(ErrorState.CLOSE_NOW, null);
- }
- if (!getErrorState().isError()) {
- if (attach != null) {
- attach.setComet(comet);
- if (comet) {
- Integer comettimeout = (Integer) request.getAttribute(
- org.apache.coyote.Constants.COMET_TIMEOUT_ATTR);
- if (comettimeout != null) {
- attach.setTimeout(comettimeout.longValue());
- }
- } else {
- //reset the timeout
- if (keepAlive) {
- attach.setTimeout(keepAliveTimeout);
- } else {
- attach.setTimeout(soTimeout);
- }
- }
-
- }
- }
- } catch (InterruptedIOException e) {
- setErrorState(ErrorState.CLOSE_NOW, e);
- } catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
- // 500 - Internal Server Error
- response.setStatus(500);
- setErrorState(ErrorState.CLOSE_NOW, t);
- log.error(sm.getString("http11processor.request.process"), t);
- getAdapter().log(request, response, 0);
- }
-
- rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
-
- if (getErrorState().isError() || status==SocketStatus.STOP) {
- return SocketState.CLOSED;
- } else if (!comet) {
- if (keepAlive) {
- inputBuffer.nextRequest();
- outputBuffer.nextRequest();
- return SocketState.OPEN;
- } else {
- return SocketState.CLOSED;
- }
- } else {
- return SocketState.LONG;
- }
- }
-
-
@Override
protected void registerForEvent(boolean read, boolean write) {
final NioChannel socket = socketWrapper.getSocket();
@@ -251,27 +179,6 @@ public class Http11NioProcessor extends
@Override
- protected void setCometTimeouts(SocketWrapper<NioChannel> socketWrapper) {
- // Comet support
- SelectionKey key = socketWrapper.getSocket().getIOChannel().keyFor(
- socketWrapper.getSocket().getPoller().getSelector());
- if (key != null) {
- NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment) key.attachment();
- if (attach != null) {
- attach.setComet(comet);
- if (comet) {
- Integer comettimeout = (Integer) request.getAttribute(
- org.apache.coyote.Constants.COMET_TIMEOUT_ATTR);
- if (comettimeout != null) {
- attach.setTimeout(comettimeout.longValue());
- }
- }
- }
- }
- }
-
-
- @Override
protected boolean breakKeepAliveLoop(SocketWrapper<NioChannel> socketWrapper) {
openSocket = keepAlive;
// Do sendfile as needed: add socket to sendfile and end
@@ -472,43 +379,6 @@ public class Http11NioProcessor extends
}
break;
}
- case COMET_BEGIN: {
- comet = true;
- break;
- }
- case COMET_END: {
- comet = false;
- break;
- }
- case COMET_CLOSE: {
- if (socketWrapper==null || socketWrapper.getSocket().getAttachment(false)==null) {
- return;
- }
- RequestInfo rp = request.getRequestProcessor();
- if (rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE) {
- // Close event for this processor triggered by request
- // processing in another processor, a non-Tomcat thread (i.e.
- // an application controlled thread) or similar.
- socketWrapper.getSocket().getPoller().add(socketWrapper.getSocket());
- }
- break;
- }
- case COMET_SETTIMEOUT: {
- if (param==null) {
- return;
- }
- if (socketWrapper==null || socketWrapper.getSocket().getAttachment(false)==null) {
- return;
- }
- NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)socketWrapper.getSocket().getAttachment(false);
- long timeout = ((Long)param).longValue();
- //if we are not piggy backing on a worker thread, set the timeout
- RequestInfo rp = request.getRequestProcessor();
- if ( rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE ) {
- attach.setTimeout(timeout);
- }
- break;
- }
}
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Tue Nov 4 11:54:58 2014
@@ -269,7 +269,6 @@ public class Http11NioProtocol extends A
socket.setAsync(true);
} else {
// Either:
- // - this is comet request
// - this is an upgraded connection
// - the request line/headers have not been completely
// read
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=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Tue Nov 4 11:54:58 2014
@@ -25,10 +25,8 @@ import org.apache.coyote.ActionCode;
import org.apache.coyote.http11.filters.BufferedInputFilter;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
-import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.JIoEndpoint;
import org.apache.tomcat.util.net.SSLSupport;
-import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.SocketWrapper;
@@ -179,12 +177,6 @@ public class Http11Processor extends Abs
@Override
- protected void setCometTimeouts(SocketWrapper<Socket> socketWrapper) {
- // NO-OP for BIO
- }
-
-
- @Override
protected boolean breakKeepAliveLoop(SocketWrapper<Socket> socketWrapper) {
openSocket = keepAlive;
// If we don't have a pipe-lined request allow this thread to be
@@ -216,16 +208,8 @@ public class Http11Processor extends Abs
}
- @Override
- public SocketState event(SocketStatus status) throws IOException {
- // Should never reach this code but in case we do...
- throw new IOException(
- sm.getString("http11processor.comet.notsupported"));
- }
-
// ----------------------------------------------------- ActionHook Methods
-
/**
* Send an action to the connector.
*
Modified: tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties Tue Nov 4 11:54:58 2014
@@ -23,7 +23,6 @@ http11processor.response.finish=Error fi
http11processor.socket.info=Exception getting socket information
http11processor.socket.ssl=Exception getting SSL attributes
http11processor.socket.sslreneg=Exception re-negotiating SSL connection
-http11processor.comet.notsupported=The Comet protocol is not supported by this connector
http11processor.sendfile.error=Error sending data using sendfile. May be caused by invalid request attributes for start/end points
http11Processor.upgrade=An internal error has occurred as upgraded connections should only be processed by the dedicated upgrade processor implementations
Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java Tue Nov 4 11:54:58 2014
@@ -141,11 +141,6 @@ public abstract class AbstractProcessor<
}
@Override
- public final SocketState event(SocketStatus status) throws IOException {
- return null;
- }
-
- @Override
public final SocketState asyncDispatch(SocketStatus status) {
return null;
}
@@ -161,11 +156,6 @@ public abstract class AbstractProcessor<
}
@Override
- public final boolean isComet() {
- return false;
- }
-
- @Override
public final boolean isAsync() {
return false;
}
Modified: tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java Tue Nov 4 11:54:58 2014
@@ -507,23 +507,12 @@ public class SpdyProcessor<S> extends Ab
}
@Override
- public boolean isComet() {
- return false;
- }
-
- @Override
public SocketState process(SocketWrapper<S> socket)
throws IOException {
throw new IOException("Unimplemented");
}
@Override
- public SocketState event(SocketStatus status) throws IOException {
- System.err.println("EVENT: " + status);
- return null;
- }
-
- @Override
public SocketState asyncDispatch(SocketStatus status) {
System.err.println("ASYNC DISPATCH: " + status);
return null;
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Tue Nov 4 11:54:58 2014
@@ -821,8 +821,6 @@ public abstract class AbstractEndpoint<S
// Some of these are always hard-coded, some are hard-coded to false (i.e.
// the endpoint does not support them) and some are configurable.
public abstract boolean getUseSendfile();
- public abstract boolean getUseComet();
- public abstract boolean getUseCometTimeout();
public abstract boolean getUsePolling();
protected LimitLatch initializeConnectionLatch() {
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Tue Nov 4 11:54:58 2014
@@ -159,15 +159,6 @@ public class AprEndpoint extends Abstrac
public boolean getUseSendfile() { return useSendfile; }
- /**
- * Allow comet request handling.
- */
- protected boolean useComet = true;
- public void setUseComet(boolean useComet) { this.useComet = useComet; }
- @Override
- public boolean getUseComet() { return useComet; }
- @Override
- public boolean getUseCometTimeout() { return false; } // Not supported
@Override
public boolean getUsePolling() { return true; } // Always supported
@@ -857,8 +848,7 @@ public class AprEndpoint extends Abstrac
/**
- * Process given socket. Called in non-comet mode, typically keep alive
- * or upgraded protocol.
+ * Process given socket. Typically keep alive or upgraded protocol.
*/
public boolean processSocket(long socket, SocketStatus status) {
try {
@@ -1405,14 +1395,9 @@ public class AprEndpoint extends Abstrac
// Close all sockets in the add queue
SocketInfo info = addList.get();
while (info != null) {
- boolean comet =
- connections.get(Long.valueOf(info.socket)).isComet();
- if (!comet || (comet && !processSocket(
- info.socket, SocketStatus.STOP))) {
- // Poller isn't running at this point so use destroySocket()
- // directly
- destroySocket(info.socket);
- }
+ // Poller isn't running at this point so use destroySocket()
+ // directly
+ destroySocket(info.socket);
info = addList.get();
}
addList.clear();
@@ -1421,12 +1406,7 @@ public class AprEndpoint extends Abstrac
int rv = Poll.pollset(pollers[i], desc);
if (rv > 0) {
for (int n = 0; n < rv; n++) {
- boolean comet = connections.get(
- Long.valueOf(desc[n*2+1])).isComet();
- if (!comet || (comet && !processSocket(
- desc[n*2+1], SocketStatus.STOP))) {
- destroySocket(desc[n*2+1]);
- }
+ destroySocket(desc[n*2+1]);
}
}
}
@@ -1483,12 +1463,7 @@ public class AprEndpoint extends Abstrac
}
if (!ok) {
// Can't do anything: close the socket right away
- boolean comet = connections.get(
- Long.valueOf(socket)).isComet();
- if (!comet || (comet && !processSocket(
- socket, SocketStatus.ERROR))) {
- closeSocket(socket);
- }
+ closeSocket(socket);
}
}
@@ -1576,12 +1551,7 @@ public class AprEndpoint extends Abstrac
Long.valueOf(socket)));
}
removeFromPoller(socket);
- boolean comet = connections.get(
- Long.valueOf(socket)).isComet();
- if (!comet || (comet && !processSocket(
- socket, SocketStatus.TIMEOUT))) {
- destroySocket(socket);
- }
+ destroySocket(socket);
socket = timeouts.check(date);
}
@@ -1703,20 +1673,11 @@ public class AprEndpoint extends Abstrac
continue;
}
if (info.read() || info.write()) {
- boolean comet = wrapper.isComet();
- if (comet || wrapper.pollerFlags != 0) {
- removeFromPoller(info.socket);
- }
wrapper.pollerFlags = wrapper.pollerFlags |
(info.read() ? Poll.APR_POLLIN : 0) |
(info.write() ? Poll.APR_POLLOUT : 0);
if (!addToPoller(info.socket, wrapper.pollerFlags)) {
- // Can't do anything: close the socket right
- // away
- if (!comet || (comet && !processSocket(
- info.socket, SocketStatus.ERROR))) {
- closeSocket(info.socket);
- }
+ closeSocket(info.socket);
} else {
timeouts.add(info.socket,
System.currentTimeMillis() +
@@ -1770,42 +1731,7 @@ public class AprEndpoint extends Abstrac
}
wrapper.pollerFlags = wrapper.pollerFlags & ~((int) desc[n*2]);
// Check for failed sockets and hand this socket off to a worker
- if (wrapper.isComet()) {
- // Event processes either a read or a write depending on what the poller returns
- if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP)
- || ((desc[n*2] & Poll.APR_POLLERR) == Poll.APR_POLLERR)
- || ((desc[n*2] & Poll.APR_POLLNVAL) == Poll.APR_POLLNVAL)) {
- if (!processSocket(desc[n*2+1], SocketStatus.ERROR)) {
- // Close socket and clear pool
- closeSocket(desc[n*2+1]);
- }
- } else if ((desc[n*2] & Poll.APR_POLLIN) == Poll.APR_POLLIN) {
- if (wrapper.pollerFlags != 0) {
- add(desc[n*2+1], 1, wrapper.pollerFlags);
- }
- if (!processSocket(desc[n*2+1], SocketStatus.OPEN_READ)) {
- // Close socket and clear pool
- closeSocket(desc[n*2+1]);
- }
- } else if ((desc[n*2] & Poll.APR_POLLOUT) == Poll.APR_POLLOUT) {
- if (wrapper.pollerFlags != 0) {
- add(desc[n*2+1], 1, wrapper.pollerFlags);
- }
- if (!processSocket(desc[n*2+1], SocketStatus.OPEN_WRITE)) {
- // Close socket and clear pool
- closeSocket(desc[n*2+1]);
- }
- } else {
- // Unknown event
- getLog().warn(sm.getString(
- "endpoint.apr.pollUnknownEvent",
- Long.valueOf(desc[n*2])));
- if (!processSocket(desc[n*2+1], SocketStatus.ERROR)) {
- // Close socket and clear pool
- closeSocket(desc[n*2+1]);
- }
- }
- } else if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP)
+ if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP)
|| ((desc[n*2] & Poll.APR_POLLERR) == Poll.APR_POLLERR)
|| ((desc[n*2] & Poll.APR_POLLNVAL) == Poll.APR_POLLNVAL)) {
if (wrapper.isAsync() || wrapper.isUpgraded()) {
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Tue Nov 4 11:54:58 2014
@@ -118,10 +118,6 @@ public class JIoEndpoint extends Abstrac
@Override
public boolean getUseSendfile() { return false; } // Not supported
@Override
- public boolean getUseComet() { return false; } // Not supported
- @Override
- public boolean getUseCometTimeout() { return false; } // Not supported
- @Override
public boolean getDeferAccept() { return false; } // Not supported
@Override
public boolean getUsePolling() { return false; } // Not supported
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Tue Nov 4 11:54:58 2014
@@ -151,15 +151,6 @@ public class Nio2Endpoint extends Abstra
public Handler getHandler() { return handler; }
- /**
- * Allow comet request handling.
- */
- private boolean useComet = true;
- public void setUseComet(boolean useComet) { this.useComet = useComet; }
- @Override
- public boolean getUseComet() { return useComet; }
- @Override
- public boolean getUseCometTimeout() { return getUseComet(); }
@Override
public boolean getUsePolling() { return true; } // Always supported
@@ -610,22 +601,11 @@ public class Nio2Endpoint extends Abstra
return true;
}
- public void closeSocket(SocketWrapper<Nio2Channel> socket, SocketStatus status) {
+ public void closeSocket(SocketWrapper<Nio2Channel> socket) {
if (socket == null) {
return;
}
try {
- if (socket.isComet() && status != null) {
- socket.setComet(false);//to avoid a loop
- if (status == SocketStatus.TIMEOUT) {
- if (processSocket0(socket, status, true)) {
- return; // don't close on comet timeout
- }
- } else {
- // Don't dispatch if the lines below are canceling the key
- processSocket0(socket, status, false);
- }
- }
handler.release(socket);
try {
if (socket.getSocket() != null) {
@@ -1088,8 +1068,7 @@ public class Nio2Endpoint extends Abstra
}
if (state == SocketState.CLOSED) {
// Close socket and pool
- socket.setComet(false);
- closeSocket(socket, SocketStatus.ERROR);
+ closeSocket(socket);
if (useCaches && running && !paused) {
nioChannels.push(socket.getSocket());
socketWrapperCache.push((Nio2SocketWrapper) socket);
@@ -1100,7 +1079,7 @@ public class Nio2Endpoint extends Abstra
launch = true;
}
} else if (handshake == -1 ) {
- closeSocket(socket, SocketStatus.DISCONNECT);
+ closeSocket(socket);
if (useCaches && running && !paused) {
nioChannels.push(socket.getSocket());
socketWrapperCache.push(((Nio2SocketWrapper) socket));
@@ -1110,7 +1089,7 @@ public class Nio2Endpoint extends Abstra
try {
oomParachuteData = null;
log.error("", oom);
- closeSocket(socket, SocketStatus.ERROR);
+ closeSocket(socket);
releaseCaches();
} catch (Throwable oomt) {
try {
@@ -1125,7 +1104,7 @@ public class Nio2Endpoint extends Abstra
} catch (Throwable t) {
log.error(sm.getString("endpoint.processing.fail"), t);
if (socket != null) {
- closeSocket(socket, SocketStatus.ERROR);
+ closeSocket(socket);
}
} finally {
if (launch) {
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Tue Nov 4 11:54:58 2014
@@ -183,15 +183,6 @@ public class NioEndpoint extends Abstrac
public Handler getHandler() { return handler; }
- /**
- * Allow comet request handling.
- */
- private boolean useComet = true;
- public void setUseComet(boolean useComet) { this.useComet = useComet; }
- @Override
- public boolean getUseComet() { return useComet; }
- @Override
- public boolean getUseCometTimeout() { return getUseComet(); }
@Override
public boolean getUsePolling() { return true; } // Always supported
@@ -618,7 +609,6 @@ public class NioEndpoint extends Abstrac
if (attachment == null) {
return false;
}
- attachment.setCometNotify(false); //will get reset upon next reg
SocketProcessor sc = processorCache.pop();
if ( sc == null ) sc = new SocketProcessor(attachment, status);
else sc.reset(attachment, status);
@@ -801,28 +791,22 @@ public class NioEndpoint extends Abstrac
final KeyAttachment att = (KeyAttachment) key.attachment();
if ( att!=null ) {
//handle callback flag
- if ((interestOps & OP_CALLBACK) == OP_CALLBACK ) {
- att.setCometNotify(true);
- } else {
- att.setCometNotify(false);
- }
interestOps = (interestOps & (~OP_CALLBACK));//remove the callback flag
att.access();//to prevent timeout
//we are registering the key to start with, reset the fairness counter.
int ops = key.interestOps() | interestOps;
att.interestOps(ops);
- if (att.getCometNotify()) key.interestOps(0);
- else key.interestOps(ops);
+ key.interestOps(ops);
} else {
cancel = true;
}
} else {
cancel = true;
}
- if ( cancel ) socket.getPoller().cancelledKey(key,SocketStatus.ERROR);
+ if ( cancel ) socket.getPoller().cancelledKey(key);
}catch (CancelledKeyException ckx) {
try {
- socket.getPoller().cancelledKey(key,SocketStatus.DISCONNECT);
+ socket.getPoller().cancelledKey(key);
}catch (Exception ignore) {}
}
}//end if
@@ -950,21 +934,10 @@ public class NioEndpoint extends Abstrac
addEvent(r);
}
- public void cancelledKey(SelectionKey key, SocketStatus status) {
+ public void cancelledKey(SelectionKey key) {
try {
if ( key == null ) return;//nothing to do
KeyAttachment ka = (KeyAttachment) key.attachment();
- if (ka != null && ka.isComet() && status != null) {
- ka.setComet(false);//to avoid a loop
- if (status == SocketStatus.TIMEOUT ) {
- if (processSocket(ka, status, true)) {
- return; // don't close on comet timeout
- }
- } else {
- // Don't dispatch if the lines below are canceling the key
- processSocket(ka, status, false);
- }
- }
key.attach(null);
if (ka!=null) handler.release(ka);
else handler.release((SocketChannel)key.channel());
@@ -1114,7 +1087,7 @@ public class NioEndpoint extends Abstrac
boolean result = true;
try {
if ( close ) {
- cancelledKey(sk, SocketStatus.STOP);
+ cancelledKey(sk);
} else if ( sk.isValid() && attachment != null ) {
attachment.access();//make sure we don't time out valid sockets
if (sk.isReadable() || sk.isWritable() ) {
@@ -1136,7 +1109,7 @@ public class NioEndpoint extends Abstrac
}
}
if (closeSocket) {
- cancelledKey(sk,SocketStatus.DISCONNECT);
+ cancelledKey(sk);
}
} else {
result = false;
@@ -1145,10 +1118,10 @@ public class NioEndpoint extends Abstrac
}
} else {
//invalid key
- cancelledKey(sk, SocketStatus.ERROR);
+ cancelledKey(sk);
}
} catch ( CancelledKeyException ckx ) {
- cancelledKey(sk, SocketStatus.ERROR);
+ cancelledKey(sk);
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
log.error("",t);
@@ -1170,7 +1143,7 @@ public class NioEndpoint extends Abstrac
if ( sd.fchannel == null ) {
File f = new File(sd.fileName);
if ( !f.exists() ) {
- cancelledKey(sk,SocketStatus.ERROR);
+ cancelledKey(sk);
return false;
}
@SuppressWarnings("resource") // Closed when channel is closed
@@ -1226,7 +1199,7 @@ public class NioEndpoint extends Abstrac
if (log.isDebugEnabled()) {
log.debug("Send file connection is being closed");
}
- cancelledKey(sk,SocketStatus.STOP);
+ cancelledKey(sk);
return false;
}
} else {
@@ -1241,11 +1214,11 @@ public class NioEndpoint extends Abstrac
}
}catch ( IOException x ) {
if ( log.isDebugEnabled() ) log.debug("Unable to complete sendfile request:", x);
- cancelledKey(sk,SocketStatus.ERROR);
+ cancelledKey(sk);
return false;
}catch ( Throwable t ) {
log.error("",t);
- cancelledKey(sk, SocketStatus.ERROR);
+ cancelledKey(sk);
return false;
}finally {
if (sc!=null) sc.setSendFile(false);
@@ -1284,15 +1257,9 @@ public class NioEndpoint extends Abstrac
try {
KeyAttachment ka = (KeyAttachment) key.attachment();
if ( ka == null ) {
- cancelledKey(key, SocketStatus.ERROR); //we don't support any keys without attachments
+ cancelledKey(key); //we don't support any keys without attachments
} else if ( ka.getError() ) {
- cancelledKey(key, SocketStatus.ERROR);//TODO this is not yet being used
- } else if (ka.getCometNotify() ) {
- ka.setCometNotify(false);
- int ops = ka.interestOps() & ~OP_CALLBACK;
- reg(key,ka,0);//avoid multiple calls, this gets re-registered after invocation
- ka.interestOps(ops);
- if (!processSocket(ka, SocketStatus.OPEN_READ, true)) processSocket(ka, SocketStatus.DISCONNECT, true);
+ cancelledKey(key);//TODO this is not yet being used
} else if ((ka.interestOps()&SelectionKey.OP_READ) == SelectionKey.OP_READ ||
(ka.interestOps()&SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) {
//only timeout sockets that we are waiting for a read from
@@ -1306,9 +1273,9 @@ public class NioEndpoint extends Abstrac
} else if (isTimedout) {
key.interestOps(0);
ka.interestOps(0); //avoid duplicate timeout calls
- cancelledKey(key, SocketStatus.TIMEOUT);
+ cancelledKey(key);
}
- } else if (ka.isAsync() || ka.isComet()) {
+ } else if (ka.isAsync()) {
if (close) {
key.interestOps(0);
ka.interestOps(0); //avoid duplicate stop calls
@@ -1326,7 +1293,7 @@ public class NioEndpoint extends Abstrac
}
}//end if
}catch ( CancelledKeyException ckx ) {
- cancelledKey(key, SocketStatus.ERROR);
+ cancelledKey(key);
}
}//for
long prevExp = nextExpiration; //for logging purposes only
@@ -1352,7 +1319,6 @@ public class NioEndpoint extends Abstrac
public void reset(Poller poller, NioChannel channel, long soTimeout) {
super.reset(channel, soTimeout);
- cometNotify = false;
interestOps = 0;
this.poller = poller;
sendfileData = null;
@@ -1384,8 +1350,6 @@ public class NioEndpoint extends Abstrac
public Poller getPoller() { return poller;}
public void setPoller(Poller poller){this.poller = poller;}
- public void setCometNotify(boolean notify) { this.cometNotify = notify; }
- public boolean getCometNotify() { return cometNotify; }
public int interestOps() { return interestOps;}
public int interestOps(int ops) { this.interestOps = ops; return ops; }
public CountDownLatch getReadLatch() { return readLatch; }
@@ -1426,7 +1390,6 @@ public class NioEndpoint extends Abstrac
private Poller poller = null;
private int interestOps = 0;
- private boolean cometNotify = false;
private CountDownLatch readLatch = null;
private CountDownLatch writeLatch = null;
private SendfileData sendfileData = null;
@@ -1558,8 +1521,7 @@ public class NioEndpoint extends Abstrac
if (state == SocketState.CLOSED) {
// Close socket and pool
try {
- ka.setComet(false);
- socket.getPoller().cancelledKey(key, SocketStatus.ERROR);
+ socket.getPoller().cancelledKey(key);
if (running && !paused) {
nioChannels.push(socket);
}
@@ -1577,7 +1539,7 @@ public class NioEndpoint extends Abstrac
}
} else if (handshake == -1 ) {
if (key != null) {
- socket.getPoller().cancelledKey(key, SocketStatus.DISCONNECT);
+ socket.getPoller().cancelledKey(key);
}
if (running && !paused) {
nioChannels.push(socket);
@@ -1592,14 +1554,14 @@ public class NioEndpoint extends Abstrac
}
} catch (CancelledKeyException cx) {
if (socket != null) {
- socket.getPoller().cancelledKey(key, null);
+ socket.getPoller().cancelledKey(key);
}
} catch (OutOfMemoryError oom) {
try {
oomParachuteData = null;
log.error("", oom);
if (socket != null) {
- socket.getPoller().cancelledKey(key,SocketStatus.ERROR);
+ socket.getPoller().cancelledKey(key);
}
releaseCaches();
} catch (Throwable oomt) {
@@ -1615,7 +1577,7 @@ public class NioEndpoint extends Abstrac
} catch (Throwable t) {
log.error("", t);
if (socket != null) {
- socket.getPoller().cancelledKey(key,SocketStatus.ERROR);
+ socket.getPoller().cancelledKey(key);
}
} finally {
socket = null;
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java Tue Nov 4 11:54:58 2014
@@ -84,7 +84,7 @@ public class SecureNio2Channel extends N
}
@Override
public void failed(Throwable exc, SocketWrapper<Nio2Channel> attachment) {
- endpoint.closeSocket(attachment, SocketStatus.ERROR);
+ endpoint.closeSocket(attachment);
}
};
handshakeWriteCompletionHandler = new CompletionHandler<Integer, SocketWrapper<Nio2Channel>>() {
@@ -98,7 +98,7 @@ public class SecureNio2Channel extends N
}
@Override
public void failed(Throwable exc, SocketWrapper<Nio2Channel> attachment) {
- endpoint.closeSocket(attachment, SocketStatus.ERROR);
+ endpoint.closeSocket(attachment);
}
};
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java Tue Nov 4 11:54:58 2014
@@ -31,7 +31,6 @@ public class SocketWrapper<E> {
private long timeout = -1;
private boolean error = false;
private volatile int keepAliveLeft = 100;
- private volatile boolean comet = false;
private volatile boolean async = false;
private boolean keptAlive = false;
private volatile boolean upgraded = false;
@@ -76,8 +75,6 @@ public class SocketWrapper<E> {
return socket;
}
- public boolean isComet() { return comet; }
- public void setComet(boolean comet) { this.comet = comet; }
public boolean isAsync() { return async; }
public void setAsync(boolean async) { this.async = async; }
public boolean isUpgraded() { return upgraded; }
@@ -155,7 +152,6 @@ public class SocketWrapper<E> {
public void reset(E socket, long timeout) {
async = false;
blockingStatus = true;
- comet = false;
dispatches.clear();
error = false;
keepAliveLeft = 100;
Modified: tomcat/trunk/webapps/docs/aio.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/aio.xml?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/aio.xml (original)
+++ tomcat/trunk/webapps/docs/aio.xml Tue Nov 4 11:54:58 2014
@@ -49,271 +49,6 @@
</section>
- <section name="Comet support">
-
- <p>
- Comet support allows a servlet to process IO asynchronously, receiving
- events when data is available for reading on the connection (rather than
- always using a blocking read), and writing data back on connections
- asynchronously (most likely responding to some event raised from some
- other source).
- </p>
-
- <subsection name="CometEvent">
-
- <p>
- Servlets which implement the <code>org.apache.catalina.comet.CometProcessor</code>
- interface will have their event method invoked rather than the usual service
- method, according to the event which occurred. The event object gives
- access to the usual request and response objects, which may be used in the
- usual way. The main difference is that those objects remain valid and fully
- functional at any time between processing of the BEGIN event until processing
- an END or ERROR event.
- The following event types exist:
- </p>
-
- <ul>
- <li>EventType.BEGIN: will be called at the beginning
- of the processing of the connection. It can be used to initialize any relevant
- fields using the request and response objects. Between the end of the processing
- of this event, and the beginning of the processing of the end or error events,
- it is possible to use the response object to write data on the open connection.
- Note that the response object and dependent OutputStream and Writer are still
- not synchronized, so when they are accessed by multiple threads,
- synchronization is mandatory. After processing the initial event, the request
- is considered to be committed.</li>
- <li>EventType.READ: This indicates that input data is available, and that one read can be made
- without blocking. The available and ready methods of the InputStream or
- Reader may be used to determine if there is a risk of blocking: the servlet
- should read while data is reported available. When encountering a read error,
- the servlet should report it by propagating the exception properly. Throwing
- an exception will cause the error event to be invoked, and the connection
- will be closed.
- Alternately, it is also possible to catch any exception, perform clean up
- on any data structure the servlet may be using, and using the close method
- of the event. It is not allowed to attempt reading data from the request
- object outside of the execution of this method.<br/>
- On some platforms, like Windows, a client disconnect is indicated by a READ event.
- Reading from the stream may result in -1, an IOException or an EOFException.
- Make sure you properly handle all these three cases.
- If you don't catch the IOException, Tomcat will instantly invoke your event chain with an ERROR as
- it catches the error for you, and you will be notified of the error at that time.
- </li>
- <li>EventType.END: End may be called to end the processing of the request. Fields that have
- been initialized in the begin method should be reset. After this event has
- been processed, the request and response objects, as well as all their dependent
- objects will be recycled and used to process other requests. End will also be
- called when data is available and the end of file is reached on the request input
- (this usually indicates the client has pipelined a request).</li>
- <li>EventType.ERROR: Error will be called by the container in the case where an IO exception
- or a similar unrecoverable error occurs on the connection. Fields that have
- been initialized in the begin method should be reset. After this event has
- been processed, the request and response objects, as well as all their dependent
- objects will be recycled and used to process other requests.</li>
- </ul>
-
- <p>
- There are some event subtypes which allow finer processing of events (note: some of these
- events require usage of the org.apache.catalina.valves.CometConnectionManagerValve valve):
- </p>
-
- <ul>
- <li>EventSubType.TIMEOUT: The connection timed out (sub type of ERROR); note that this ERROR
- type is not fatal, and the connection will not be closed unless the servlet uses the close
- method of the event.
- </li>
- <li>EventSubType.CLIENT_DISCONNECT: The client connection was closed (sub type of ERROR).
- </li>
- <li>EventSubType.IOEXCEPTION: An IO exception occurred, such as invalid content, for example,
- an invalid chunk block (sub type of ERROR).
- </li>
- <li>EventSubType.WEBAPP_RELOAD: The web application is being reloaded (sub type of END).
- </li>
- <li>EventSubType.SESSION_END: The servlet ended the session (sub type of END).
- </li>
- </ul>
-
- <p>
- As described above, the typical lifecycle of a Comet request will consist in a series of
- events such as: BEGIN -> READ -> READ -> READ -> ERROR/TIMEOUT. At any time, the servlet
- may end processing of the request by using the close method of the event object.
- </p>
-
- </subsection>
-
- <subsection name="CometFilter">
-
- <p>
- Similar to regular filters, a filter chain is invoked when comet events are processed.
- These filters should implement the CometFilter interface (which works in the same way as
- the regular Filter interface), and should be declared and mapped in the deployment
- descriptor in the same way as a regular filter. The filter chain when processing an event
- will only include filters which match all the usual mapping rules, and also implement
- the CometFiler interface.
- </p>
-
- </subsection>
-
- <subsection name="Example code">
-
- <p>
- The following pseudo code servlet implements asynchronous chat functionality using the API
- described above:
- </p>
-
- <source><![CDATA[public class ChatServlet
- extends HttpServlet implements CometProcessor {
-
- protected ArrayList<HttpServletResponse> connections =
- new ArrayList<HttpServletResponse>();
- protected MessageSender messageSender = null;
-
- public void init() throws ServletException {
- messageSender = new MessageSender();
- Thread messageSenderThread =
- new Thread(messageSender, "MessageSender[" + getServletContext().getContextPath() + "]");
- messageSenderThread.setDaemon(true);
- messageSenderThread.start();
- }
-
- public void destroy() {
- connections.clear();
- messageSender.stop();
- messageSender = null;
- }
-
- /**
- * Process the given Comet event.
- *
- * @param event The Comet event that will be processed
- * @throws IOException
- * @throws ServletException
- */
- public void event(CometEvent event)
- throws IOException, ServletException {
- HttpServletRequest request = event.getHttpServletRequest();
- HttpServletResponse response = event.getHttpServletResponse();
- if (event.getEventType() == CometEvent.EventType.BEGIN) {
- log("Begin for session: " + request.getSession(true).getId());
- PrintWriter writer = response.getWriter();
- writer.println("<!DOCTYPE html>");
- writer.println("<head><title>JSP Chat</title></head><body>");
- writer.flush();
- synchronized(connections) {
- connections.add(response);
- }
- } else if (event.getEventType() == CometEvent.EventType.ERROR) {
- log("Error for session: " + request.getSession(true).getId());
- synchronized(connections) {
- connections.remove(response);
- }
- event.close();
- } else if (event.getEventType() == CometEvent.EventType.END) {
- log("End for session: " + request.getSession(true).getId());
- synchronized(connections) {
- connections.remove(response);
- }
- PrintWriter writer = response.getWriter();
- writer.println("</body></html>");
- event.close();
- } else if (event.getEventType() == CometEvent.EventType.READ) {
- InputStream is = request.getInputStream();
- byte[] buf = new byte[512];
- do {
- int n = is.read(buf); //can throw an IOException
- if (n > 0) {
- log("Read " + n + " bytes: " + new String(buf, 0, n)
- + " for session: " + request.getSession(true).getId());
- } else if (n < 0) {
- error(event, request, response);
- return;
- }
- } while (is.available() > 0);
- }
- }
-
- public class MessageSender implements Runnable {
-
- protected boolean running = true;
- protected ArrayList<String> messages = new ArrayList<String>();
-
- public MessageSender() {
- }
-
- public void stop() {
- running = false;
- }
-
- /**
- * Add message for sending.
- */
- public void send(String user, String message) {
- synchronized (messages) {
- messages.add("[" + user + "]: " + message);
- messages.notify();
- }
- }
-
- public void run() {
-
- while (running) {
-
- if (messages.size() == 0) {
- try {
- synchronized (messages) {
- messages.wait();
- }
- } catch (InterruptedException e) {
- // Ignore
- }
- }
-
- synchronized (connections) {
- String[] pendingMessages = null;
- synchronized (messages) {
- pendingMessages = messages.toArray(new String[0]);
- messages.clear();
- }
- // Send any pending message on all the open connections
- for (int i = 0; i < connections.size(); i++) {
- try {
- PrintWriter writer = connections.get(i).getWriter();
- for (int j = 0; j < pendingMessages.length; j++) {
- writer.println(pendingMessages[j] + "<br>");
- }
- writer.flush();
- } catch (IOException e) {
- log("IOExeption sending message", e);
- }
- }
- }
-
- }
-
- }
-
- }
-
-}]]></source>
-
- </subsection>
- <subsection name="Comet timeouts">
- <p>If you are using the NIO connector, you can set individual timeouts for your different comet connections.
- To set a timeout, simply set a request attribute like the following code shows:</p>
- <source>CometEvent event.... event.setTimeout(30*1000);</source>
- <p>or</p>
- <source>event.getHttpServletRequest().setAttribute("org.apache.tomcat.comet.timeout", new Integer(30 * 1000));</source>
- <p>
- This sets the timeout to 30 seconds.
- Important note: in order to set this timeout, it has to be done on the <code>BEGIN</code> event.
- The default value is <code>soTimeout</code>
- </p>
- <p>If you are using the APR connector, all Comet connections will have the same timeout value. It is <code>soTimeout*50</code>
- </p>
- </subsection>
-
- </section>
-
<section name="Asynchronous writes">
<p>
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Nov 4 11:54:58 2014
@@ -54,6 +54,9 @@
Make Java 8 the minimum required version to build and run Tomcat 9.
(markt)
</add>
+ <update>
+ Remove support for Comet. (markt)
+ </update>
</subsection>
</section>
</body>
Modified: tomcat/trunk/webapps/docs/config/http.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/http.xml?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/http.xml (original)
+++ tomcat/trunk/webapps/docs/config/http.xml Tue Nov 4 11:54:58 2014
@@ -677,11 +677,6 @@
default value is <code>1000</code> milliseconds.</p>
</attribute>
- <attribute name="useComet" required="false">
- <p>(bool)Whether to allow comet servlets or not. Default value is
- <code>true</code>.</p>
- </attribute>
-
<attribute name="useSendfile" required="false">
<p>(bool)Use this attribute to enable or disable sendfile capability.
The default value is <code>true</code>. Note that the use of sendfile
@@ -812,11 +807,6 @@
The default value is <code>false</code>.</p>
</attribute>
- <attribute name="useComet" required="false">
- <p>(bool)Whether to allow comet servlets or not. Default value is
- <code>true</code>.</p>
- </attribute>
-
<attribute name="useSendfile" required="false">
<p>(bool)Use this attribute to enable or disable sendfile capability.
The default value is <code>true</code>. Note that the use of sendfile
@@ -964,11 +954,6 @@
this priority means.</p>
</attribute>
- <attribute name="useComet" required="false">
- <p>(bool)Whether to allow comet servlets or not. Default value is
- <code>true</code>.</p>
- </attribute>
-
<attribute name="useSendfile" required="false">
<p>(bool)Use this attribute to enable or disable sendfile capability.
The default value is <code>true</code>. Note that the use of sendfile
Modified: tomcat/trunk/webapps/examples/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/web.xml?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/WEB-INF/web.xml (original)
+++ tomcat/trunk/webapps/examples/WEB-INF/web.xml Tue Nov 4 11:54:58 2014
@@ -122,10 +122,6 @@
<servlet-class>ServletToJsp</servlet-class>
</servlet>
<servlet>
- <servlet-name>ChatServlet</servlet-name>
- <servlet-class>chat.ChatServlet</servlet-class>
- </servlet>
- <servlet>
<servlet-name>CompressionFilterTestServlet</servlet-name>
<servlet-class>compressionFilters.CompressionFilterTestServlet</servlet-class>
</servlet>
@@ -155,10 +151,6 @@
</servlet>
<servlet-mapping>
- <servlet-name>ChatServlet</servlet-name>
- <url-pattern>/servlets/chat/chat</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
<servlet-name>CompressionFilterTestServlet</servlet-name>
<url-pattern>/CompressionTest</url-pattern>
</servlet-mapping>
Modified: tomcat/trunk/webapps/examples/servlets/index.html
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/servlets/index.html?rev=1636547&r1=1636546&r2=1636547&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/servlets/index.html (original)
+++ tomcat/trunk/webapps/examples/servlets/index.html Tue Nov 4 11:54:58 2014
@@ -149,20 +149,6 @@ for clarity.</p>
</tr>
<tr>
- <th colspan="3">Comet processing example:<br />
- <span style="font-weight: normal;">See the <strong>"Advanced IO"</strong> chapter in the User Guide for
- details. This example only works with the HTTP NIO or HTTP APR/native
- connectors as these are the only connectors that support Comet.</span></th>
-</tr>
-<tr>
- <td>Comet Chat</td>
- <td style="width: 30%;">
- <a href="chat/"><img SRC="images/execute.gif" alt=""> Execute</a>
- </td>
- <td style="width: 30%;"></td>
-</tr>
-
-<tr>
<th colspan="3">Servlet 3.1 Non-blocking IO examples</th>
</tr>
<tr>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org