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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to