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,
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 @@ class Http2Connection {
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 @@ class Http2Connection {
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);
}

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_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);

View file

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