8372951: The property jdk.httpclient.quic.maxBidiStreams should be renamed to jdk.internal

8365794: StreamLimitTest vs H3StreamLimitReachedTest: consider renaming or merging

Reviewed-by: jpai
This commit is contained in:
Daniel Fuchs 2025-12-03 15:32:46 +00:00
parent 6d5bf9c801
commit af8977e406
4 changed files with 61 additions and 10 deletions

View File

@ -174,17 +174,29 @@ public class QuicConnectionImpl extends QuicConnection implements QuicPacketRece
public static final int SMALLEST_MAXIMUM_DATAGRAM_SIZE =
QuicClient.SMALLEST_MAXIMUM_DATAGRAM_SIZE;
// The default value for the Quic maxInitialTimeout, in seconds. Will be clamped to [1, Integer.MAX_vALUE]
public static final int DEFAULT_MAX_INITIAL_TIMEOUT = Math.clamp(
Utils.getIntegerProperty("jdk.httpclient.quic.maxInitialTimeout", 30),
1, Integer.MAX_VALUE);
// The default value for the initial_max_data transport parameter that a QuicConnectionImpl
// will send to its peer, if no value is provided by the higher level protocol.
public static final long DEFAULT_INITIAL_MAX_DATA = Math.clamp(
Utils.getLongProperty("jdk.httpclient.quic.maxInitialData", 15 << 20),
0, 1L << 60);
// The default value for the initial_max_stream_data_bidi_local, initial_max_stream_data_bidi_remote,
// and initial_max_stream_data_uni transport parameters that a QuicConnectionImpl
// will send to its peer, if no value is provided by the higher level protocol.
public static final long DEFAULT_INITIAL_STREAM_MAX_DATA = Math.clamp(
Utils.getIntegerProperty("jdk.httpclient.quic.maxStreamInitialData", 6 << 20),
0, 1L << 60);
// The default value for the initial_max_streams_bidi transport parameter that a QuicConnectionImpl
// will send to its peer, if no value is provided by the higher level protocol.
// The Http3ClientImpl typically provides a value of 0, so this property has no effect
// on QuicConnectionImpl instances created on behalf of the HTTP/3 client
public static final int DEFAULT_MAX_BIDI_STREAMS =
Utils.getIntegerProperty("jdk.httpclient.quic.maxBidiStreams", 100);
Utils.getIntegerProperty("jdk.internal.httpclient.quic.maxBidiStreams", 100);
// The default value for the initial_max_streams_uni transport parameter that a QuicConnectionImpl
// will send to its peer, if no value is provided by the higher level protocol.
public static final int DEFAULT_MAX_UNI_STREAMS =
Utils.getIntegerProperty("jdk.httpclient.quic.maxUniStreams", 100);
public static final boolean USE_DIRECT_BUFFER_POOL = Utils.getBooleanProperty(

View File

@ -37,7 +37,7 @@
* -Djdk.internal.httpclient.quic.poller.usePlatformThreads=false
* -Djdk.httpclient.quic.maxEndpoints=-1
* -Djdk.httpclient.http3.maxStreamLimitTimeout=0
* -Djdk.httpclient.quic.maxBidiStreams=2
* -Djdk.internal.httpclient.quic.maxBidiStreams=2
* -Djdk.httpclient.retryOnStreamlimit=50
* -Djdk.httpclient.HttpClient.log=errors,http3,quic:retransmit
* -Dsimpleget.requests=100
@ -61,7 +61,7 @@
* -XX:+UnlockExperimentalVMOptions -XX:-VMContinuations
* -Djdk.httpclient.quic.maxEndpoints=-1
* -Djdk.httpclient.http3.maxStreamLimitTimeout=0
* -Djdk.httpclient.quic.maxBidiStreams=2
* -Djdk.internal.httpclient.quic.maxBidiStreams=2
* -Djdk.httpclient.retryOnStreamlimit=50
* -Djdk.httpclient.HttpClient.log=errors,http3,quic:retransmit
* -Dsimpleget.requests=100
@ -85,7 +85,7 @@
* -Djdk.internal.httpclient.quic.useNioSelector=true
* -Djdk.httpclient.http3.maxStreamLimitTimeout=0
* -Djdk.httpclient.quic.maxEndpoints=1
* -Djdk.httpclient.quic.maxBidiStreams=2
* -Djdk.internal.httpclient.quic.maxBidiStreams=2
* -Djdk.httpclient.retryOnStreamlimit=50
* -Djdk.httpclient.HttpClient.log=errors,http3,quic:hs:retransmit
* -Dsimpleget.requests=100
@ -109,7 +109,7 @@
* -Djdk.httpclient.quic.maxPtoBackoff=9
* -Djdk.httpclient.http3.maxStreamLimitTimeout=0
* -Djdk.httpclient.quic.maxEndpoints=1
* -Djdk.httpclient.quic.maxBidiStreams=2
* -Djdk.internal.httpclient.quic.maxBidiStreams=2
* -Djdk.httpclient.retryOnStreamlimit=50
* -Djdk.httpclient.HttpClient.log=errors,http3,quic:hs:retransmit
* -Dsimpleget.requests=100
@ -239,7 +239,7 @@ public class H3MultipleConnectionsToSameHost implements HttpServerAdapters {
long done = System.nanoTime();
System.out.println("Initialization and warmup took "+ TimeUnit.NANOSECONDS.toMillis(done-prestart)+" millis");
// Thread.sleep(30000);
int maxBidiStreams = Utils.getIntegerNetProperty("jdk.httpclient.quic.maxBidiStreams", 100);
int maxBidiStreams = Utils.getIntegerNetProperty("jdk.internal.httpclient.quic.maxBidiStreams", 100);
long timeout = MAX_STREAM_LIMIT_WAIT_TIMEOUT;
Set<String> connections = new ConcurrentSkipListSet<>();

View File

@ -23,6 +23,24 @@
/*
* @test id=with-default-wait
* @summary this test verifies that the correct connection is
* used when a request is retried on a new connection
* due to stream limit reached.
* The maxBidiStreams limit is artificially set to 1.
* This configuration uses the default wait for a stream
* to become available before retrying.
* Different configurations are tested if possible,
* with both HTTP/3 only and HTTP/2 HTTP/3 with altsvc.
* In one case the HTTP/3 only server will be listening
* on the same port as the HTTP/2 server, with the
* HTTP/2 server advertising an AltService on a different
* port. In another case the AltService will be on the
* same port as the HTTP/2 server and the HTTP/3 server
* will be on a different port. In all case, the test
* verifies that the right connection is picked up
* for the retry.
* @bug 8372951
* @comment this test also tests bug 8372951
* @library /test/lib /test/jdk/java/net/httpclient/lib
* @build jdk.httpclient.test.lib.http2.Http2TestServer
* jdk.test.lib.Asserts
@ -30,12 +48,30 @@
* jdk.test.lib.net.SimpleSSLContext
* @run testng/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors,http3,quic:control
* -Djdk.internal.httpclient.debug=false
* -Djdk.httpclient.quic.maxBidiStreams=1
* -Djdk.internal.httpclient.quic.maxBidiStreams=1
* H3StreamLimitReachedTest
*/
/*
* @test id=with-no-wait
* @summary this test verifies that the correct connection is
* used when a request is retried on a new connection
* due to stream limit reached.
* The maxBidiStreams limit is artificially set to 1.
* This configuration retries immediately on a new
* connection when no stream is available.
* Different configurations are tested if possible,
* with both HTTP/3 only and HTTP/2 HTTP/3 with altsvc.
* In one case the HTTP/3 only server will be listening
* on the same port as the HTTP/2 server, with the
* HTTP/2 server advertising an AltService on a different
* port. In another case the AltService will be on the
* same port as the HTTP/2 server and the HTTP/3 server
* will be on a different port. In all case, the test
* verifies that the right connection is picked up
* for the retry.
* @bug 8372951
* @comment this test also tests bug 8372951
* @library /test/lib /test/jdk/java/net/httpclient/lib
* @build jdk.httpclient.test.lib.http2.Http2TestServer
* jdk.test.lib.Asserts
@ -43,7 +79,7 @@
* jdk.test.lib.net.SimpleSSLContext
* @run testng/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors,http3,quic:control
* -Djdk.internal.httpclient.debug=false
* -Djdk.httpclient.quic.maxBidiStreams=1
* -Djdk.internal.httpclient.quic.maxBidiStreams=1
* -Djdk.httpclient.http3.maxStreamLimitTimeout=0
* -Djdk.httpclient.retryOnStreamlimit=9
* H3StreamLimitReachedTest
@ -93,7 +129,7 @@ import static org.testng.Assert.assertFalse;
public class H3StreamLimitReachedTest implements HttpServerAdapters {
private static final String CLASS_NAME = H3ConnectionPoolTest.class.getSimpleName();
private static final String CLASS_NAME = H3StreamLimitReachedTest.class.getSimpleName();
static int altsvcPort, https2Port, http3Port;
static Http3TestServer http3OnlyServer;

View File

@ -56,7 +56,10 @@ import static java.net.http.HttpOption.H3_DISCOVERY;
/*
* @test
* @summary verifies that when the Quic stream limit is reached
* then HTTP3 requests are retried on newer connection
* then HTTP3 requests are retried on newer connection.
* This test uses an HTTP/3 only test server, which is
* configured to allow the test to control when a new
* MAX_STREAMS frames is sent to the client.
* @library /test/lib /test/jdk/java/net/httpclient/lib
* @build jdk.test.lib.net.SimpleSSLContext
* jdk.httpclient.test.lib.common.HttpServerAdapters