From 58cedbbdcd309390e0cc11ebc73e14c325d2c82e Mon Sep 17 00:00:00 2001 From: "Mateusz \"Serafin\" Gajewski" Date: Thu, 9 Oct 2025 14:05:39 +0200 Subject: [PATCH 1/2] Reenable HTTP/2 for internal communication Lower number of TCP/IP connections for HTTP/2 --- .../src/main/java/io/trino/server/CoordinatorModule.java | 8 +++++++- .../java/io/trino/server/InternalCommunicationConfig.java | 2 +- .../io/trino/server/TestInternalCommunicationConfig.java | 6 +++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/trino-main/src/main/java/io/trino/server/CoordinatorModule.java b/core/trino-main/src/main/java/io/trino/server/CoordinatorModule.java index adee6e2e7f2b..3fd43bbc350c 100644 --- a/core/trino-main/src/main/java/io/trino/server/CoordinatorModule.java +++ b/core/trino-main/src/main/java/io/trino/server/CoordinatorModule.java @@ -357,11 +357,17 @@ List getCompositeOutputDataSizeEstimatorDelegateFac binder.bind(RemoteTaskStats.class).in(Scopes.SINGLETON); newExporter(binder).export(RemoteTaskStats.class).withGeneratedName(); + InternalCommunicationConfig internalCommunicationConfig = buildConfigObject(InternalCommunicationConfig.class); install(internalHttpClientModule("scheduler", ForScheduler.class) .withConfigDefaults(config -> { config.setIdleTimeout(new Duration(60, SECONDS)); config.setRequestTimeout(new Duration(20, SECONDS)); - config.setMaxConnectionsPerServer(250); + if (internalCommunicationConfig.isHttp2Enabled()) { + config.setMaxConnectionsPerServer(64); + } + else { + config.setMaxConnectionsPerServer(250); + } }).build()); binder.bind(ScheduledExecutorService.class).annotatedWith(ForScheduler.class) diff --git a/core/trino-main/src/main/java/io/trino/server/InternalCommunicationConfig.java b/core/trino-main/src/main/java/io/trino/server/InternalCommunicationConfig.java index e067caedceb6..2ab09bf69859 100644 --- a/core/trino-main/src/main/java/io/trino/server/InternalCommunicationConfig.java +++ b/core/trino-main/src/main/java/io/trino/server/InternalCommunicationConfig.java @@ -31,7 +31,7 @@ public class InternalCommunicationConfig { private String sharedSecret; - private boolean http2Enabled; + private boolean http2Enabled = true; private boolean httpsRequired; private String keyStorePath; private String keyStorePassword; diff --git a/core/trino-main/src/test/java/io/trino/server/TestInternalCommunicationConfig.java b/core/trino-main/src/test/java/io/trino/server/TestInternalCommunicationConfig.java index 801e8307eba6..174318a955fb 100644 --- a/core/trino-main/src/test/java/io/trino/server/TestInternalCommunicationConfig.java +++ b/core/trino-main/src/test/java/io/trino/server/TestInternalCommunicationConfig.java @@ -32,7 +32,7 @@ public void testDefaults() { assertRecordedDefaults(recordDefaults(InternalCommunicationConfig.class) .setSharedSecret(null) - .setHttp2Enabled(false) + .setHttp2Enabled(true) .setHttpsRequired(false) .setKeyStorePath(null) .setKeyStorePassword(null) @@ -50,7 +50,7 @@ public void testExplicitPropertyMappings() Map properties = ImmutableMap.builder() .put("internal-communication.shared-secret", "secret") - .put("internal-communication.http2.enabled", "true") + .put("internal-communication.http2.enabled", "false") .put("internal-communication.https.required", "true") .put("internal-communication.https.keystore.path", keystoreFile.toString()) .put("internal-communication.https.keystore.key", "key-key") @@ -61,7 +61,7 @@ public void testExplicitPropertyMappings() InternalCommunicationConfig expected = new InternalCommunicationConfig() .setSharedSecret("secret") - .setHttp2Enabled(true) + .setHttp2Enabled(false) .setHttpsRequired(true) .setKeyStorePath(keystoreFile.toString()) .setKeyStorePassword("key-key") From ba74023c496dfddd9d42033386eccf082e89fc6b Mon Sep 17 00:00:00 2001 From: "Mateusz \"Serafin\" Gajewski" Date: Thu, 9 Oct 2025 14:57:27 +0200 Subject: [PATCH 2/2] Use Virtual Threads for http client/server --- .../io/trino/server/InternalCommunicationHttpClientModule.java | 1 + .../src/main/java/io/trino/server/ServerMainModule.java | 3 +++ 2 files changed, 4 insertions(+) diff --git a/core/trino-main/src/main/java/io/trino/server/InternalCommunicationHttpClientModule.java b/core/trino-main/src/main/java/io/trino/server/InternalCommunicationHttpClientModule.java index 6d4c5b683b14..1d77f0d7c1d3 100644 --- a/core/trino-main/src/main/java/io/trino/server/InternalCommunicationHttpClientModule.java +++ b/core/trino-main/src/main/java/io/trino/server/InternalCommunicationHttpClientModule.java @@ -72,6 +72,7 @@ protected void setup(Binder binder) public static void configureClient(HttpClientConfig httpConfig, InternalCommunicationConfig internalCommunicationConfig) { httpConfig.setHttp2Enabled(internalCommunicationConfig.isHttp2Enabled()); + httpConfig.setUseVirtualThreads(true); if (internalCommunicationConfig.isHttpsRequired() && internalCommunicationConfig.getKeyStorePath() == null && internalCommunicationConfig.getTrustStorePath() == null) { configureClientForAutomaticHttps(httpConfig, internalCommunicationConfig); diff --git a/core/trino-main/src/main/java/io/trino/server/ServerMainModule.java b/core/trino-main/src/main/java/io/trino/server/ServerMainModule.java index 32ba910f978f..656031b13798 100644 --- a/core/trino-main/src/main/java/io/trino/server/ServerMainModule.java +++ b/core/trino-main/src/main/java/io/trino/server/ServerMainModule.java @@ -163,6 +163,7 @@ import static com.google.inject.multibindings.OptionalBinder.newOptionalBinder; import static io.airlift.concurrent.Threads.daemonThreadsNamed; import static io.airlift.configuration.ConfigBinder.configBinder; +import static io.airlift.http.server.HttpServerBinder.httpServerBinder; import static io.airlift.jaxrs.JaxrsBinder.jaxrsBinder; import static io.airlift.json.JsonBinder.jsonBinder; import static io.airlift.json.JsonCodecBinder.jsonCodecBinder; @@ -198,6 +199,8 @@ protected void setup(Binder binder) install(new WorkerModule()); } + httpServerBinder(binder).enableVirtualThreads(); + binder.bind(StartupStatus.class).in(Scopes.SINGLETON); configBinder(binder).bindConfigDefaults(HttpServerConfig.class, httpServerConfig -> {