Author: markt
Date: Fri Jun 26 19:17:16 2015
New Revision: 1687840
URL: http://svn.apache.org/r1687840
Log:
Expose the calling of pause() on the endpoint to the HTTP/2 upgrade processor
so it can stop accepting additional streams.
This commit is just the plumbing to make this possible. The implementation that
prevents new streams from being accepted will follow in a subsequent commit.
Modified:
tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
tomcat/trunk/java/org/apache/coyote/Processor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/coyote/http11/upgrade/InternalHttpUpgradeHandler.java
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.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/coyote/AbstractProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Fri Jun 26
19:17:16 2015
@@ -945,6 +945,22 @@ public abstract class AbstractProtocol<S
}
}
}
+
+ @Override
+ public final void pause() {
+ /*
+ * Inform all the processors associated with current connections
+ * that the endpoint is being paused. Most won't care. Those
+ * processing multiplexed streams may wish to take action. For
+ * example, HTTP/2 may wish to stop accepting new streams.
+ *
+ * Note that even if the endpoint is resumed, there is (currently)
+ * no API to inform the Processors of this.
+ */
+ for (Processor processor : connections.values()) {
+ processor.pause();
+ }
+ }
}
protected static class RecycledProcessors<P extends Processor, S>
Modified: tomcat/trunk/java/org/apache/coyote/Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Processor.java?rev=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/Processor.java Fri Jun 26 19:17:16 2015
@@ -76,4 +76,12 @@ public interface Processor {
* @return leftover bytes
*/
ByteBuffer getLeftoverInput();
+
+ /**
+ * Informs the processor that the underlying I/O layer has stopped
accepting
+ * new connections. This is primarily intended to enable processors that
+ * use multiplexed connections to prevent further 'streams' being added to
+ * an existing multiplexed connection.
+ */
+ void pause();
}
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Fri Jun 26
19:17:16 2015
@@ -888,6 +888,12 @@ public class AjpProcessor extends Abstra
}
+ @Override
+ public void pause() {
+ // NOOP for AJP
+ }
+
+
// ------------------------------------------------------ Protected Methods
// Methods used by SocketInputBuffer
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Fri Jun 26
19:17:16 2015
@@ -1887,4 +1887,10 @@ public class Http11Processor extends Abs
return inputBuffer.getLeftover();
}
+
+ @Override
+ public void pause() {
+ // NOOP for HTTP
+ }
+
}
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/InternalHttpUpgradeHandler.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/InternalHttpUpgradeHandler.java?rev=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/coyote/http11/upgrade/InternalHttpUpgradeHandler.java
(original)
+++
tomcat/trunk/java/org/apache/coyote/http11/upgrade/InternalHttpUpgradeHandler.java
Fri Jun 26 19:17:16 2015
@@ -35,4 +35,6 @@ public interface InternalHttpUpgradeHand
void setSocketWrapper(SocketWrapperBase<?> wrapper);
void setSslSupport(SSLSupport sslSupport);
+
+ void pause();
}
\ No newline at end of file
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java?rev=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
(original)
+++
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
Fri Jun 26 19:17:16 2015
@@ -126,4 +126,10 @@ public class UpgradeProcessorExternal ex
public final void setSslSupport(SSLSupport sslSupport) {
// NO-OP
}
+
+
+ @Override
+ public void pause() {
+ // NOOP for AJP
+ }
}
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java?rev=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
(original)
+++
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
Fri Jun 26 19:17:16 2015
@@ -57,6 +57,12 @@ public class UpgradeProcessorInternal ex
}
+ @Override
+ public void pause() {
+ internalHttpUpgradeHandler.pause();
+ }
+
+
// --------------------------------------------------- AutoCloseable
methods
@Override
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Fri Jun
26 19:17:16 2015
@@ -319,6 +319,15 @@ public class Http2UpgradeHandler extends
@Override
+ public void pause() {
+ if (log.isDebugEnabled()) {
+ log.debug(sm.getString("upgradeHandler.pause.entry",
connectionId));
+ }
+ // TODO: Stop accepting new streams
+ }
+
+
+ @Override
public void destroy() {
// NO-OP
}
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Fri Jun
26 19:17:16 2015
@@ -79,6 +79,7 @@ upgradeHandler.rst.debug=Connection [{0}
upgradeHandler.goaway.debug=Connection [{0}], Goaway, Last stream [{1}], Error
code [{2}], Debug data [{3}]
upgradeHandler.init=Connection [{0}]
upgradeHandler.ioerror=Connection [{0}]
+upgradeHandler.pause.entry=Connection [{0}] Pausing
upgradeHandler.sendPrefaceFail=Failed to send preface to client
upgradeHandler.socketCloseFailed=Error closing socket
upgradeHandler.stream.closed=Stream [{0}] has been closed for some time
Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java?rev=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Fri Jun 26
19:17:16 2015
@@ -136,6 +136,12 @@ public class StreamProcessor extends Abs
@Override
+ public void pause() {
+ // NO-OP. Handled by the Http2UpgradeHandler
+ }
+
+
+ @Override
public SocketState process(SocketWrapperBase<?> socket) throws IOException
{
// Should never happen
throw new
IllegalStateException(sm.getString("streamProcessor.httpupgrade.notsupported"));
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Fri Jun
26 19:17:16 2015
@@ -94,6 +94,15 @@ public abstract class AbstractEndpoint<S
/**
+ * Inform the handler that the endpoint has stopped accepting any new
+ * connections. Typically, the endpoint will be stopped shortly
+ * afterwards but it is possible that the endpoint will be resumed so
+ * the handler should not assume that a stop will follow.
+ */
+ public void pause();
+
+
+ /**
* Recycle resources associated with the handler.
*/
public void recycle();
@@ -877,6 +886,7 @@ public abstract class AbstractEndpoint<S
if (running && !paused) {
paused = true;
unlockAccept();
+ getHandler().pause();
}
}
@@ -906,6 +916,8 @@ public abstract class AbstractEndpoint<S
}
+ protected abstract Handler<S> getHandler();
+
protected abstract Log getLog();
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri Jun 26
19:17:16 2015
@@ -144,6 +144,7 @@ public class AprEndpoint extends Abstrac
*/
protected Handler<Long> handler = null;
public void setHandler(Handler<Long> handler ) { this.handler = handler; }
+ @Override
public Handler<Long> getHandler() { return handler; }
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Fri Jun 26
19:17:16 2015
@@ -104,6 +104,7 @@ public class Nio2Endpoint extends Abstra
*/
private Handler handler = null;
public void setHandler(Handler handler ) { this.handler = handler; }
+ @Override
public Handler getHandler() { return handler; }
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Fri Jun 26
19:17:16 2015
@@ -144,6 +144,7 @@ public class NioEndpoint extends Abstrac
*/
private Handler handler = null;
public void setHandler(Handler handler ) { this.handler = handler; }
+ @Override
public Handler getHandler() { return handler; }
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
Fri Jun 26 19:17:16 2015
@@ -188,6 +188,12 @@ public class WsHttpUpgradeHandler implem
@Override
+ public void pause() {
+ // NO-OP
+ }
+
+
+ @Override
public void destroy() {
if (connection != null) {
try {
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=1687840&r1=1687839&r2=1687840&view=diff
==============================================================================
---
tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java
(original)
+++
tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java
Fri Jun 26 19:17:16 2015
@@ -227,6 +227,11 @@ public class TestUpgradeInternalHandler
}
@Override
+ public void pause() {
+ // NO-OP
+ }
+
+ @Override
public void destroy() {
// NO-OP
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]