8207959: The initial value of SETTINGS_MAX_CONCURRENT_STREAMS should have no limit

Reviewed-by: michaelm
This commit is contained in:
Chris Hegarty 2018-07-23 11:47:03 +01:00
parent 23084b76fa
commit e605cae39f
3 changed files with 16 additions and 11 deletions

View file

@ -297,7 +297,7 @@ class Http2Connection {
this.framesDecoder = new FramesDecoder(this::processFrame, this.framesDecoder = new FramesDecoder(this::processFrame,
clientSettings.getParameter(SettingsFrame.MAX_FRAME_SIZE)); clientSettings.getParameter(SettingsFrame.MAX_FRAME_SIZE));
// serverSettings will be updated by server // serverSettings will be updated by server
this.serverSettings = SettingsFrame.getDefaultSettings(); this.serverSettings = SettingsFrame.defaultRFCSettings();
this.hpackOut = new Encoder(serverSettings.getParameter(HEADER_TABLE_SIZE)); this.hpackOut = new Encoder(serverSettings.getParameter(HEADER_TABLE_SIZE));
this.hpackIn = new Decoder(clientSettings.getParameter(HEADER_TABLE_SIZE)); this.hpackIn = new Decoder(clientSettings.getParameter(HEADER_TABLE_SIZE));
if (debugHpack.on()) { if (debugHpack.on()) {
@ -430,12 +430,12 @@ class Http2Connection {
assert numReservedClientStreams >= 0; assert numReservedClientStreams >= 0;
assert numReservedServerStreams >= 0; assert numReservedServerStreams >= 0;
if (clientInitiated && numReservedClientStreams >= getMaxConcurrentClientStreams()) { if (clientInitiated &&numReservedClientStreams >= maxConcurrentClientInitiatedStreams()) {
throw new IOException("too many concurrent streams"); throw new IOException("too many concurrent streams");
} else if (clientInitiated) { } else if (clientInitiated) {
numReservedClientStreams++; numReservedClientStreams++;
} }
if (!clientInitiated && numReservedServerStreams >= getMaxConcurrentServerStreams()) { if (!clientInitiated && numReservedServerStreams >= maxConcurrentServerInitiatedStreams()) {
return false; return false;
} else if (!clientInitiated) { } else if (!clientInitiated) {
numReservedServerStreams++; numReservedServerStreams++;
@ -580,11 +580,11 @@ class Http2Connection {
return serverSettings.getParameter(INITIAL_WINDOW_SIZE); return serverSettings.getParameter(INITIAL_WINDOW_SIZE);
} }
final int getMaxConcurrentClientStreams() { final int maxConcurrentClientInitiatedStreams() {
return serverSettings.getParameter(MAX_CONCURRENT_STREAMS); return serverSettings.getParameter(MAX_CONCURRENT_STREAMS);
} }
final int getMaxConcurrentServerStreams() { final int maxConcurrentServerInitiatedStreams() {
return clientSettings.getParameter(MAX_CONCURRENT_STREAMS); return clientSettings.getParameter(MAX_CONCURRENT_STREAMS);
} }

View file

@ -161,15 +161,20 @@ public class SettingsFrame extends Http2Frame {
} }
} }
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_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 final int DEFAULT_MAX_FRAME_SIZE = 16 * K;
public static SettingsFrame getDefaultSettings() { public static SettingsFrame defaultRFCSettings() {
SettingsFrame f = new SettingsFrame(); SettingsFrame f = new SettingsFrame();
// TODO: check these values f.setParameter(ENABLE_PUSH, DEFAULT_ENABLE_PUSH);
f.setParameter(ENABLE_PUSH, 1);
f.setParameter(HEADER_TABLE_SIZE, DEFAULT_HEADER_TABLE_SIZE); f.setParameter(HEADER_TABLE_SIZE, DEFAULT_HEADER_TABLE_SIZE);
f.setParameter(MAX_CONCURRENT_STREAMS, DEFAULT_MAX_CONCURRENT_STREAMS); f.setParameter(MAX_CONCURRENT_STREAMS, DEFAULT_MAX_CONCURRENT_STREAMS);
f.setParameter(INITIAL_WINDOW_SIZE, DEFAULT_INITIAL_WINDOW_SIZE); f.setParameter(INITIAL_WINDOW_SIZE, DEFAULT_INITIAL_WINDOW_SIZE);

View file

@ -156,7 +156,7 @@ public class Http2TestServerConnection {
}; };
private SettingsFrame getServerSettingProperties() { private SettingsFrame getServerSettingProperties() {
SettingsFrame s = SettingsFrame.getDefaultSettings(); SettingsFrame s = SettingsFrame.defaultRFCSettings();
if (properties == null) if (properties == null)
return s; return s;
for (int i=0; i<propIDs.length; i++) { for (int i=0; i<propIDs.length; i++) {