# HG changeset patch # User chegar # Date 1532342823 -3600 # Node ID 1d8b1d4eae6a1519e5750fa243414f45ec08be6b # Parent 9c1d9d1fb5436952724f22f8aaf85277cd48ddf7 8207959: The initial value of SETTINGS_MAX_CONCURRENT_STREAMS should have no limit Reviewed-by: michaelm diff -r 9c1d9d1fb543 -r 1d8b1d4eae6a src/java.net.http/share/classes/jdk/internal/net/http/Http2Connection.java --- a/src/java.net.http/share/classes/jdk/internal/net/http/Http2Connection.java Tue Jul 24 13:55:57 2018 +0800 +++ b/src/java.net.http/share/classes/jdk/internal/net/http/Http2Connection.java Mon Jul 23 11:47:03 2018 +0100 @@ -297,7 +297,7 @@ this.framesDecoder = new FramesDecoder(this::processFrame, clientSettings.getParameter(SettingsFrame.MAX_FRAME_SIZE)); // serverSettings will be updated by server - this.serverSettings = SettingsFrame.getDefaultSettings(); + this.serverSettings = SettingsFrame.defaultRFCSettings(); this.hpackOut = new Encoder(serverSettings.getParameter(HEADER_TABLE_SIZE)); this.hpackIn = new Decoder(clientSettings.getParameter(HEADER_TABLE_SIZE)); if (debugHpack.on()) { @@ -430,12 +430,12 @@ assert numReservedClientStreams >= 0; assert numReservedServerStreams >= 0; - if (clientInitiated && numReservedClientStreams >= getMaxConcurrentClientStreams()) { + if (clientInitiated &&numReservedClientStreams >= maxConcurrentClientInitiatedStreams()) { throw new IOException("too many concurrent streams"); } else if (clientInitiated) { numReservedClientStreams++; } - if (!clientInitiated && numReservedServerStreams >= getMaxConcurrentServerStreams()) { + if (!clientInitiated && numReservedServerStreams >= maxConcurrentServerInitiatedStreams()) { return false; } else if (!clientInitiated) { numReservedServerStreams++; @@ -580,11 +580,11 @@ return serverSettings.getParameter(INITIAL_WINDOW_SIZE); } - final int getMaxConcurrentClientStreams() { + final int maxConcurrentClientInitiatedStreams() { return serverSettings.getParameter(MAX_CONCURRENT_STREAMS); } - final int getMaxConcurrentServerStreams() { + final int maxConcurrentServerInitiatedStreams() { return clientSettings.getParameter(MAX_CONCURRENT_STREAMS); } diff -r 9c1d9d1fb543 -r 1d8b1d4eae6a src/java.net.http/share/classes/jdk/internal/net/http/frame/SettingsFrame.java --- a/src/java.net.http/share/classes/jdk/internal/net/http/frame/SettingsFrame.java Tue Jul 24 13:55:57 2018 +0800 +++ b/src/java.net.http/share/classes/jdk/internal/net/http/frame/SettingsFrame.java Mon Jul 23 11:47:03 2018 +0100 @@ -161,15 +161,20 @@ } } - public static final int DEFAULT_INITIAL_WINDOW_SIZE = 64 * K -1; + // The initial value is 4,096 octets. public static final int DEFAULT_HEADER_TABLE_SIZE = 4 * K; - public static final int DEFAULT_MAX_CONCURRENT_STREAMS = 100; + // The initial value is 1, which indicates that server push is permitted. + public static final int DEFAULT_ENABLE_PUSH = 1; + // Initially, there is no limit to this value. This limit is directional. + public static final int DEFAULT_MAX_CONCURRENT_STREAMS = Integer.MAX_VALUE; + // The initial value is 2^16-1 (65,535) octets. + public static final int DEFAULT_INITIAL_WINDOW_SIZE = 64 * K -1; + // The initial value is 2^14 (16,384) octets. public static final int DEFAULT_MAX_FRAME_SIZE = 16 * K; - public static SettingsFrame getDefaultSettings() { + public static SettingsFrame defaultRFCSettings() { SettingsFrame f = new SettingsFrame(); - // TODO: check these values - f.setParameter(ENABLE_PUSH, 1); + f.setParameter(ENABLE_PUSH, DEFAULT_ENABLE_PUSH); f.setParameter(HEADER_TABLE_SIZE, DEFAULT_HEADER_TABLE_SIZE); f.setParameter(MAX_CONCURRENT_STREAMS, DEFAULT_MAX_CONCURRENT_STREAMS); f.setParameter(INITIAL_WINDOW_SIZE, DEFAULT_INITIAL_WINDOW_SIZE); diff -r 9c1d9d1fb543 -r 1d8b1d4eae6a test/jdk/java/net/httpclient/http2/server/Http2TestServerConnection.java --- a/test/jdk/java/net/httpclient/http2/server/Http2TestServerConnection.java Tue Jul 24 13:55:57 2018 +0800 +++ b/test/jdk/java/net/httpclient/http2/server/Http2TestServerConnection.java Mon Jul 23 11:47:03 2018 +0100 @@ -156,7 +156,7 @@ }; private SettingsFrame getServerSettingProperties() { - SettingsFrame s = SettingsFrame.getDefaultSettings(); + SettingsFrame s = SettingsFrame.defaultRFCSettings(); if (properties == null) return s; for (int i=0; i