diff --git a/core/trino-main/src/main/java/io/trino/node/AirliftNodeInventoryModule.java b/core/trino-main/src/main/java/io/trino/node/AirliftNodeInventoryModule.java index 3e87485dccaa..087fa5d5fe6b 100644 --- a/core/trino-main/src/main/java/io/trino/node/AirliftNodeInventoryModule.java +++ b/core/trino-main/src/main/java/io/trino/node/AirliftNodeInventoryModule.java @@ -15,7 +15,6 @@ import com.google.inject.Binder; import com.google.inject.Scopes; -import com.google.inject.multibindings.Multibinder; import io.airlift.configuration.AbstractConfigurationAwareModule; import io.airlift.discovery.client.DiscoveryModule; import io.airlift.discovery.client.ForDiscoveryClient; @@ -23,27 +22,12 @@ import io.airlift.discovery.server.EmbeddedDiscoveryModule; import io.airlift.discovery.server.ServiceResource; import io.airlift.discovery.store.StoreResource; -import io.airlift.http.client.HttpClientConfig; -import io.airlift.http.client.HttpRequestFilter; -import io.airlift.http.client.Request; import io.trino.failuredetector.FailureDetectorModule; -import io.trino.server.InternalAuthenticationManager; -import io.trino.server.InternalCommunicationConfig; import io.trino.server.NodeResource; import io.trino.server.ServerConfig; -import java.io.UncheckedIOException; -import java.net.InetAddress; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.UnknownHostException; - -import static com.google.inject.multibindings.Multibinder.newSetBinder; -import static io.airlift.configuration.ConfigBinder.configBinder; import static io.airlift.discovery.client.DiscoveryBinder.discoveryBinder; import static io.airlift.jaxrs.JaxrsBinder.jaxrsBinder; -import static io.airlift.node.AddressToHostname.encodeAddressAsHostname; -import static io.trino.server.InternalCommunicationHttpClientModule.configureClient; import static io.trino.server.security.ResourceSecurityBinder.resourceSecurityBinder; public class AirliftNodeInventoryModule @@ -92,43 +76,6 @@ protected void setup(Binder binder) .addProperty("coordinator", String.valueOf(coordinator)); // internal communication setup for discovery http client - InternalCommunicationConfig internalCommunicationConfig = buildConfigObject(InternalCommunicationConfig.class); - Multibinder discoveryFilterBinder = newSetBinder(binder, HttpRequestFilter.class, ForDiscoveryClient.class); - if (internalCommunicationConfig.isHttpsRequired() && internalCommunicationConfig.getKeyStorePath() == null && internalCommunicationConfig.getTrustStorePath() == null) { - discoveryFilterBinder.addBinding().to(DiscoveryEncodeAddressAsHostname.class); - } - configBinder(binder).bindConfigDefaults(HttpClientConfig.class, ForDiscoveryClient.class, config -> configureClient(config, internalCommunicationConfig)); - discoveryFilterBinder.addBinding().to(InternalAuthenticationManager.class); - } - - private static class DiscoveryEncodeAddressAsHostname - implements HttpRequestFilter - { - @Override - public Request filterRequest(Request request) - { - return Request.Builder.fromRequest(request) - .setUri(toIpEncodedAsHostnameUri(request.getUri())) - .build(); - } - - private static URI toIpEncodedAsHostnameUri(URI uri) - { - if (!uri.getScheme().equals("https")) { - return uri; - } - try { - String host = uri.getHost(); - InetAddress inetAddress = InetAddress.getByName(host); - String addressAsHostname = encodeAddressAsHostname(inetAddress); - return new URI(uri.getScheme(), uri.getUserInfo(), addressAsHostname, uri.getPort(), uri.getPath(), uri.getQuery(), uri.getFragment()); - } - catch (UnknownHostException e) { - throw new UncheckedIOException(e); - } - catch (URISyntaxException e) { - throw new RuntimeException(e); - } - } + install(new InternalCommunicationForDiscoveryModule(ForDiscoveryClient.class)); } } diff --git a/core/trino-main/src/main/java/io/trino/node/AnnounceNodeInventoryModule.java b/core/trino-main/src/main/java/io/trino/node/AnnounceNodeInventoryModule.java index 8fec265da70b..6f7efba7a3bb 100644 --- a/core/trino-main/src/main/java/io/trino/node/AnnounceNodeInventoryModule.java +++ b/core/trino-main/src/main/java/io/trino/node/AnnounceNodeInventoryModule.java @@ -46,5 +46,8 @@ protected void setup(Binder binder) config.setIdleTimeout(new Duration(3, SECONDS)); config.setRequestTimeout(new Duration(3, SECONDS)); }).build()); + + // internal communication setup for discovery http client + install(new InternalCommunicationForDiscoveryModule(ForAnnouncer.class)); } } diff --git a/core/trino-main/src/main/java/io/trino/node/InternalCommunicationForDiscoveryModule.java b/core/trino-main/src/main/java/io/trino/node/InternalCommunicationForDiscoveryModule.java new file mode 100644 index 000000000000..7b47227b11a2 --- /dev/null +++ b/core/trino-main/src/main/java/io/trino/node/InternalCommunicationForDiscoveryModule.java @@ -0,0 +1,90 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.trino.node; + +import com.google.inject.Binder; +import com.google.inject.multibindings.Multibinder; +import io.airlift.configuration.AbstractConfigurationAwareModule; +import io.airlift.http.client.HttpClientConfig; +import io.airlift.http.client.HttpRequestFilter; +import io.airlift.http.client.Request; +import io.trino.server.InternalAuthenticationManager; +import io.trino.server.InternalCommunicationConfig; + +import java.io.UncheckedIOException; +import java.lang.annotation.Annotation; +import java.net.InetAddress; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.UnknownHostException; + +import static com.google.inject.multibindings.Multibinder.newSetBinder; +import static io.airlift.configuration.ConfigBinder.configBinder; +import static io.airlift.node.AddressToHostname.encodeAddressAsHostname; +import static io.trino.server.InternalCommunicationHttpClientModule.configureClient; +import static java.util.Objects.requireNonNull; + +public class InternalCommunicationForDiscoveryModule + extends AbstractConfigurationAwareModule +{ + private final Class httpClientQualifier; + + public InternalCommunicationForDiscoveryModule(Class httpClientQualifier) + { + this.httpClientQualifier = requireNonNull(httpClientQualifier, "httpClientQualifier is null"); + } + + @Override + protected void setup(Binder binder) + { + InternalCommunicationConfig internalCommunicationConfig = buildConfigObject(InternalCommunicationConfig.class); + Multibinder discoveryFilterBinder = newSetBinder(binder, HttpRequestFilter.class, httpClientQualifier); + if (internalCommunicationConfig.isHttpsRequired() && internalCommunicationConfig.getKeyStorePath() == null && internalCommunicationConfig.getTrustStorePath() == null) { + discoveryFilterBinder.addBinding().to(DiscoveryEncodeAddressAsHostname.class); + } + configBinder(binder).bindConfigDefaults(HttpClientConfig.class, httpClientQualifier, config -> configureClient(config, internalCommunicationConfig)); + discoveryFilterBinder.addBinding().to(InternalAuthenticationManager.class); + } + + private static class DiscoveryEncodeAddressAsHostname + implements HttpRequestFilter + { + @Override + public Request filterRequest(Request request) + { + return Request.Builder.fromRequest(request) + .setUri(toIpEncodedAsHostnameUri(request.getUri())) + .build(); + } + + private static URI toIpEncodedAsHostnameUri(URI uri) + { + if (!uri.getScheme().equals("https")) { + return uri; + } + try { + String host = uri.getHost(); + InetAddress inetAddress = InetAddress.getByName(host); + String addressAsHostname = encodeAddressAsHostname(inetAddress); + return new URI(uri.getScheme(), uri.getUserInfo(), addressAsHostname, uri.getPort(), uri.getPath(), uri.getQuery(), uri.getFragment()); + } + catch (UnknownHostException e) { + throw new UncheckedIOException(e); + } + catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } + } +}