Author: markt Date: Sun Jul 26 18:34:42 2015 New Revision: 1692743 URL: http://svn.apache.org/r1692743 Log: Make initial Window size configurable. Define some constants for default configuration settings
Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java?rev=1692743&r1=1692742&r2=1692743&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java Sun Jul 26 18:34:42 2015 @@ -29,17 +29,26 @@ import org.apache.tomcat.util.net.Socket public class Http2Protocol implements UpgradeProtocol { - private static final long DEFAULT_MAX_CONCURRENT_STREAMS = 200; + static final long DEFAULT_READ_TIMEOUT = 10000; + static final long DEFAULT_KEEP_ALIVE_TIMEOUT = 30000; + static final long DEFAULT_WRITE_TIMEOUT = 10000; + // The HTTP/2 specification recommends a minimum default of 100 + static final long DEFAULT_MAX_CONCURRENT_STREAMS = 200; + // This default is defined by the HTTP/2 specification + static final int DEFAULT_INITIAL_WINDOW_SIZE = (1 << 16) - 1; private static final String HTTP_UPGRADE_NAME = "h2c"; private static final String ALPN_NAME = "h2"; private static final byte[] ALPN_IDENTIFIER = ALPN_NAME.getBytes(StandardCharsets.UTF_8); // All timeouts in milliseconds - private long readTimeout = 10000; - private long keepAliveTimeout = 30000; - private long writeTimeout = 10000; + private long readTimeout = DEFAULT_READ_TIMEOUT; + private long keepAliveTimeout = DEFAULT_KEEP_ALIVE_TIMEOUT; + private long writeTimeout = DEFAULT_WRITE_TIMEOUT; private long maxConcurrentStreams = DEFAULT_MAX_CONCURRENT_STREAMS; + // If a lower initial value is required, set it here but DO NOT change the + // default defined above. + private int initialWindowSize = DEFAULT_INITIAL_WINDOW_SIZE; @Override public String getHttpUpgradeName(boolean isSecure) { @@ -77,6 +86,7 @@ public class Http2Protocol implements Up result.setKeepAliveTimeout(getKeepAliveTimeout()); result.setWriteTimeout(getWriteTimeout()); result.setMaxConcurrentStreams(getMaxConcurrentStreams()); + result.setInitialWindowSize(getInitialWindowSize()); return result; } @@ -142,4 +152,14 @@ public class Http2Protocol implements Up public void setMaxConcurrentStreams(long maxConcurrentStreams) { this.maxConcurrentStreams = maxConcurrentStreams; } + + + public int getInitialWindowSize() { + return initialWindowSize; + } + + + public void setInitialWindowSize(int initialWindowSize) { + this.initialWindowSize = initialWindowSize; + } } 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=1692743&r1=1692742&r2=1692743&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Sun Jul 26 18:34:42 2015 @@ -121,9 +121,9 @@ public class Http2UpgradeHandler extends private HpackEncoder hpackEncoder; // All timeouts in milliseconds - private long readTimeout = 10000; - private long keepAliveTimeout = 30000; - private long writeTimeout = 10000; + private long readTimeout = Http2Protocol.DEFAULT_READ_TIMEOUT; + private long keepAliveTimeout = Http2Protocol.DEFAULT_KEEP_ALIVE_TIMEOUT; + private long writeTimeout = Http2Protocol.DEFAULT_WRITE_TIMEOUT; private final Map<Integer,Stream> streams = new HashMap<>(); private final AtomicInteger activeRemoteStreamCount = new AtomicInteger(0); @@ -205,6 +205,7 @@ public class Http2UpgradeHandler extends } // Send the initial settings frame + // TODO: Need to send non-default settings values try { socketWrapper.write(true, SETTINGS_EMPTY, 0, SETTINGS_EMPTY.length); socketWrapper.flush(true); @@ -809,11 +810,28 @@ public class Http2UpgradeHandler extends } + /* + * This only has an effect if called before the connection is established + */ public void setMaxConcurrentStreams(long maxConcurrentStreams) { localSettings.setMaxConcurrentStreams(maxConcurrentStreams); } + /* + * This only has an effect if called before the connection is established + */ + public void setInitialWindowSize(int initialWindowSize) { + try { + localSettings.setInitialWindowSize(initialWindowSize); + } catch (ConnectionException e) { + // Illegal setting. Ignore it but log a warning. + log.warn(sm.getString("upgradeHandler.initialWindowSize.invalid", + connectionId, Integer.toString(initialWindowSize))); + } + } + + // ----------------------------------------------- Http2Parser.Input methods @Override 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=1692743&r1=1692742&r2=1692743&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Sun Jul 26 18:34:42 2015 @@ -81,6 +81,7 @@ upgradeHandler.noNewStreams=Connection [ upgradeHandler.rst.debug=Connection [{0}], Stream [{1}], Error [{2}], RST (closing stream) upgradeHandler.goaway.debug=Connection [{0}], Goaway, Last stream [{1}], Error code [{2}], Debug data [{3}] upgradeHandler.init=Connection [{0}] +upgradeHandler.initialWindowSize.invalid=Connection [{0}], Illegal value of [{1}] ignored for initial window size upgradeHandler.invalidPreface=Connection [{0}], Invalid connection preface upgradeHandler.ioerror=Connection [{0}] upgradeHandler.pause.entry=Connection [{0}] Pausing --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org