Skip to content

Commit f7b96d6

Browse files
authored
Move to main HTTP/3 version (#11849)
Updates the Netty libraries for HTTP/3
1 parent 5896cb3 commit f7b96d6

File tree

18 files changed

+64
-38
lines changed

18 files changed

+64
-38
lines changed

core-bom/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ micronautBom {
1313
suppressions {
1414
// io_uring was graduated to the main netty repo, so we don't track the incubator version anymore.
1515
acceptedVersionRegressions.add("netty-iouring")
16+
acceptedVersionRegressions.add("netty-http3")
17+
acceptedLibraryRegressions.add("netty-incubator-codec-http3")
1618
}
1719
propertyName = "core"
1820
}

gradle/libs.versions.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ managed-kotlin = "1.9.25"
8080
managed-kotlin-coroutines = "1.8.1"
8181
managed-methvin-directory-watcher = "0.19.0"
8282
managed-netty = "4.2.2.Final"
83-
managed-netty-http3 = "0.0.29.Final"
8483
managed-netty-tcnative = "2.0.72.Final"
8584
managed-reactive-streams = "1.0.4"
8685
# This should be kept aligned with https://github.com/micronaut-projects/micronaut-reactor/blob/master/gradle.properties from the BOM
@@ -153,8 +152,10 @@ managed-methvin-directoryWatcher = { module = "io.methvin:directory-watcher", ve
153152
managed-netty-buffer = { module = "io.netty:netty-buffer", version.ref = "managed-netty" }
154153
managed-netty-codec-http = { module = "io.netty:netty-codec-http", version.ref = "managed-netty" }
155154
managed-netty-codec-http2 = { module = "io.netty:netty-codec-http2", version.ref = "managed-netty" }
155+
managed-netty-codec-http3 = { module = "io.netty:netty-codec-http3", version.ref = "managed-netty" }
156+
managed-netty-codec-classes-quic = { module = "io.netty:netty-codec-classes-quic", version.ref = "managed-netty" }
157+
managed-netty-codec-native-quic = { module = "io.netty:netty-codec-native-quic", version.ref = "managed-netty" }
156158
managed-netty-common = { module = "io.netty:netty-common", version.ref = "managed-netty" }
157-
managed-netty-incubator-codec-http3 = { module = "io.netty.incubator:netty-incubator-codec-http3", version.ref = "managed-netty-http3" }
158159
managed-netty-handler = { module = "io.netty:netty-handler", version.ref = "managed-netty" }
159160
managed-netty-handler-proxy = { module = "io.netty:netty-handler-proxy", version.ref = "managed-netty" }
160161
managed-netty-transport-native-epoll = { module = "io.netty:netty-transport-native-epoll", version.ref = "managed-netty" }

http-client/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ dependencies {
1919
api(projects.micronautHttpNetty)
2020
api(libs.managed.netty.handler.proxy)
2121

22-
compileOnly(libs.managed.netty.incubator.codec.http3)
23-
testImplementation(libs.managed.netty.incubator.codec.http3)
22+
compileOnly(projects.micronautHttpNettyHttp3)
23+
testImplementation(projects.micronautHttpNettyHttp3)
2424

2525
testAnnotationProcessor(platform(libs.test.boms.micronaut.validation))
2626
testAnnotationProcessor(libs.micronaut.validation.processor) {

http-client/src/main/java/io/micronaut/http/client/netty/ConnectionManager.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@
4949
import io.netty.channel.EventLoopGroup;
5050
import io.netty.channel.MultiThreadIoEventLoopGroup;
5151
import io.netty.channel.nio.NioIoHandler;
52+
import io.netty.handler.codec.http3.Http3;
53+
import io.netty.handler.codec.http3.Http3ClientConnectionHandler;
54+
import io.netty.handler.codec.http3.Http3FrameToHttpObjectCodec;
55+
import io.netty.handler.codec.http3.Http3HeadersFrame;
56+
import io.netty.handler.codec.http3.Http3RequestStreamInitializer;
57+
import io.netty.handler.codec.http3.Http3SettingsFrame;
58+
import io.netty.handler.codec.quic.QuicChannel;
59+
import io.netty.handler.codec.quic.QuicSslContext;
60+
import io.netty.handler.codec.quic.QuicStreamChannel;
5261
import io.netty.handler.codec.DecoderException;
5362
import io.netty.handler.codec.http.DefaultFullHttpRequest;
5463
import io.netty.handler.codec.http.HttpClientCodec;
@@ -87,15 +96,6 @@
8796
import io.netty.handler.timeout.IdleStateHandler;
8897
import io.netty.handler.timeout.ReadTimeoutException;
8998
import io.netty.handler.timeout.ReadTimeoutHandler;
90-
import io.netty.incubator.codec.http3.Http3;
91-
import io.netty.incubator.codec.http3.Http3ClientConnectionHandler;
92-
import io.netty.incubator.codec.http3.Http3FrameToHttpObjectCodec;
93-
import io.netty.incubator.codec.http3.Http3HeadersFrame;
94-
import io.netty.incubator.codec.http3.Http3RequestStreamInitializer;
95-
import io.netty.incubator.codec.http3.Http3SettingsFrame;
96-
import io.netty.incubator.codec.quic.QuicChannel;
97-
import io.netty.incubator.codec.quic.QuicSslContext;
98-
import io.netty.incubator.codec.quic.QuicStreamChannel;
9999
import io.netty.resolver.AddressResolver;
100100
import io.netty.resolver.AddressResolverGroup;
101101
import io.netty.resolver.DefaultAddressResolverGroup;

http-client/src/main/java/io/micronaut/http/client/netty/ssl/ClientSslBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import io.micronaut.core.annotation.NonNull;
2020
import io.micronaut.http.client.HttpVersionSelection;
2121
import io.micronaut.http.ssl.SslConfiguration;
22+
import io.netty.handler.codec.quic.QuicSslContext;
2223
import io.netty.handler.ssl.SslContext;
23-
import io.netty.incubator.codec.quic.QuicSslContext;
2424

2525
/**
2626
* Interface used by the netty HTTP client to construct the SSL context.

http-client/src/main/java/io/micronaut/http/client/netty/ssl/NettyClientSslBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import io.micronaut.http.ssl.SslBuilder;
2828
import io.micronaut.http.ssl.SslConfiguration;
2929
import io.micronaut.http.ssl.SslConfigurationException;
30+
import io.netty.handler.codec.http3.Http3;
31+
import io.netty.handler.codec.quic.QuicSslContext;
32+
import io.netty.handler.codec.quic.QuicSslContextBuilder;
3033
import io.netty.handler.codec.http2.Http2SecurityUtil;
3134
import io.netty.handler.ssl.ApplicationProtocolConfig;
3235
import io.netty.handler.ssl.ClientAuth;
@@ -35,9 +38,6 @@
3538
import io.netty.handler.ssl.SslProvider;
3639
import io.netty.handler.ssl.SupportedCipherSuiteFilter;
3740
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
38-
import io.netty.incubator.codec.http3.Http3;
39-
import io.netty.incubator.codec.quic.QuicSslContext;
40-
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
4141
import jakarta.inject.Singleton;
4242
import org.slf4j.Logger;
4343
import org.slf4j.LoggerFactory;

http-netty-http3/build.gradle.kts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
plugins {
2+
id("io.micronaut.build.internal.convention-library")
3+
}
4+
5+
dependencies {
6+
api(libs.managed.netty.codec.http3) {
7+
exclude(group = "io.netty", module = "netty-codec-native-quic")
8+
}
9+
api(libs.managed.netty.codec.classes.quic)
10+
runtimeOnly(variantOf(libs.managed.netty.codec.native.quic) { classifier("linux-x86_64") })
11+
runtimeOnly(variantOf(libs.managed.netty.codec.native.quic) { classifier("linux-aarch_64") })
12+
runtimeOnly(variantOf(libs.managed.netty.codec.native.quic) { classifier("osx-x86_64") })
13+
runtimeOnly(variantOf(libs.managed.netty.codec.native.quic) { classifier("osx-aarch_64") })
14+
runtimeOnly(variantOf(libs.managed.netty.codec.native.quic) { classifier("windows-x86_64") })
15+
}
16+
17+
micronautBuild {
18+
binaryCompatibility {
19+
// remove after 4.9.0
20+
enabled = false
21+
}
22+
}

http-server-netty/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ dependencies {
3333
compileOnly(projects.micronautWebsocket)
3434
compileOnly(libs.managed.kotlin.stdlib)
3535
compileOnly(libs.managed.netty.transport.native.unix.common)
36-
compileOnly(libs.managed.netty.incubator.codec.http3)
36+
compileOnly(projects.micronautHttpNettyHttp3)
3737
compileOnly(libs.brotli4j)
3838

3939
testImplementation(libs.jmh.core)
@@ -60,7 +60,7 @@ dependencies {
6060
testImplementation(projects.micronautInjectJavaTest)
6161
testImplementation(projects.micronautHttpClient)
6262
testImplementation(libs.spotbugs)
63-
testImplementation(libs.managed.netty.incubator.codec.http3)
63+
testImplementation(projects.micronautHttpNettyHttp3)
6464
testImplementation(libs.bcpkix)
6565
testImplementation(projects.micronautJacksonDatabind)
6666
// Add Micronaut Jackson XML after v4 Migration

http-server-netty/src/main/java/io/micronaut/http/server/netty/HttpPipelineBuilder.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@
4040
import io.netty.channel.ChannelOutboundHandler;
4141
import io.netty.channel.ChannelPipeline;
4242
import io.netty.channel.SimpleChannelInboundHandler;
43+
import io.netty.handler.codec.http3.Http3;
44+
import io.netty.handler.codec.http3.Http3FrameToHttpObjectCodec;
45+
import io.netty.handler.codec.http3.Http3ServerConnectionHandler;
46+
import io.netty.handler.codec.quic.QuicChannel;
47+
import io.netty.handler.codec.quic.QuicSslContext;
48+
import io.netty.handler.codec.quic.QuicSslEngine;
49+
import io.netty.handler.codec.quic.QuicStreamChannel;
4350
import io.netty.handler.codec.http.FullHttpRequest;
4451
import io.netty.handler.codec.http.HttpMessage;
4552
import io.netty.handler.codec.http.HttpObjectAggregator;
@@ -66,13 +73,6 @@
6673
import io.netty.handler.ssl.SslHandler;
6774
import io.netty.handler.ssl.SslHandshakeCompletionEvent;
6875
import io.netty.handler.timeout.IdleStateHandler;
69-
import io.netty.incubator.codec.http3.Http3;
70-
import io.netty.incubator.codec.http3.Http3FrameToHttpObjectCodec;
71-
import io.netty.incubator.codec.http3.Http3ServerConnectionHandler;
72-
import io.netty.incubator.codec.quic.QuicChannel;
73-
import io.netty.incubator.codec.quic.QuicSslContext;
74-
import io.netty.incubator.codec.quic.QuicSslEngine;
75-
import io.netty.incubator.codec.quic.QuicStreamChannel;
7676
import io.netty.util.AsciiString;
7777
import io.netty.util.AttributeKey;
7878
import io.netty.util.ReferenceCountUtil;
@@ -214,7 +214,7 @@ HttpPipelineBuilder pipelineBuilder() {
214214
*/
215215
private static final class QuicFactory {
216216
/**
217-
* Create a QUIC SSL engine provider ({@link io.netty.incubator.codec.quic.QuicCodecBuilder#sslEngineProvider(Function)}).
217+
* Create a QUIC SSL engine provider ({@link io.netty.handler.codec.quic.QuicCodecBuilder#sslEngineProvider(Function)}).
218218
*
219219
* @return The engine provider
220220
*/

http-server-netty/src/main/java/io/micronaut/http/server/netty/QuicTokenHandlerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import io.micronaut.core.annotation.Internal;
1919
import io.netty.buffer.ByteBuf;
2020
import io.netty.buffer.ByteBufAllocator;
21-
import io.netty.incubator.codec.quic.QuicTokenHandler;
21+
import io.netty.handler.codec.quic.QuicTokenHandler;
2222
import io.netty.util.concurrent.FastThreadLocal;
2323

2424
import javax.crypto.KeyGenerator;

0 commit comments

Comments
 (0)