Skip to content

Commit 186dc24

Browse files
committed
Extract InternalCommunicationForDiscoveryModule
So that it can be reused for other announce modes.
1 parent 44edfed commit 186dc24

File tree

2 files changed

+83
-55
lines changed

2 files changed

+83
-55
lines changed

core/trino-main/src/main/java/io/trino/node/AirliftNodeInventoryModule.java

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,18 @@
1515

1616
import com.google.inject.Binder;
1717
import com.google.inject.Scopes;
18-
import com.google.inject.multibindings.Multibinder;
1918
import io.airlift.configuration.AbstractConfigurationAwareModule;
2019
import io.airlift.discovery.client.DiscoveryModule;
21-
import io.airlift.discovery.client.ForDiscoveryClient;
2220
import io.airlift.discovery.server.DynamicAnnouncementResource;
2321
import io.airlift.discovery.server.EmbeddedDiscoveryModule;
2422
import io.airlift.discovery.server.ServiceResource;
2523
import io.airlift.discovery.store.StoreResource;
26-
import io.airlift.http.client.HttpClientConfig;
27-
import io.airlift.http.client.HttpRequestFilter;
28-
import io.airlift.http.client.Request;
2924
import io.trino.failuredetector.FailureDetectorModule;
30-
import io.trino.server.InternalAuthenticationManager;
31-
import io.trino.server.InternalCommunicationConfig;
3225
import io.trino.server.NodeResource;
3326
import io.trino.server.ServerConfig;
3427

35-
import java.io.UncheckedIOException;
36-
import java.net.InetAddress;
37-
import java.net.URI;
38-
import java.net.URISyntaxException;
39-
import java.net.UnknownHostException;
40-
41-
import static com.google.inject.multibindings.Multibinder.newSetBinder;
42-
import static io.airlift.configuration.ConfigBinder.configBinder;
4328
import static io.airlift.discovery.client.DiscoveryBinder.discoveryBinder;
4429
import static io.airlift.jaxrs.JaxrsBinder.jaxrsBinder;
45-
import static io.airlift.node.AddressToHostname.encodeAddressAsHostname;
46-
import static io.trino.server.InternalCommunicationHttpClientModule.configureClient;
4730
import static io.trino.server.security.ResourceSecurityBinder.resourceSecurityBinder;
4831

4932
public class AirliftNodeInventoryModule
@@ -92,43 +75,6 @@ protected void setup(Binder binder)
9275
.addProperty("coordinator", String.valueOf(coordinator));
9376

9477
// internal communication setup for discovery http client
95-
InternalCommunicationConfig internalCommunicationConfig = buildConfigObject(InternalCommunicationConfig.class);
96-
Multibinder<HttpRequestFilter> discoveryFilterBinder = newSetBinder(binder, HttpRequestFilter.class, ForDiscoveryClient.class);
97-
if (internalCommunicationConfig.isHttpsRequired() && internalCommunicationConfig.getKeyStorePath() == null && internalCommunicationConfig.getTrustStorePath() == null) {
98-
discoveryFilterBinder.addBinding().to(DiscoveryEncodeAddressAsHostname.class);
99-
}
100-
configBinder(binder).bindConfigDefaults(HttpClientConfig.class, ForDiscoveryClient.class, config -> configureClient(config, internalCommunicationConfig));
101-
discoveryFilterBinder.addBinding().to(InternalAuthenticationManager.class);
102-
}
103-
104-
private static class DiscoveryEncodeAddressAsHostname
105-
implements HttpRequestFilter
106-
{
107-
@Override
108-
public Request filterRequest(Request request)
109-
{
110-
return Request.Builder.fromRequest(request)
111-
.setUri(toIpEncodedAsHostnameUri(request.getUri()))
112-
.build();
113-
}
114-
115-
private static URI toIpEncodedAsHostnameUri(URI uri)
116-
{
117-
if (!uri.getScheme().equals("https")) {
118-
return uri;
119-
}
120-
try {
121-
String host = uri.getHost();
122-
InetAddress inetAddress = InetAddress.getByName(host);
123-
String addressAsHostname = encodeAddressAsHostname(inetAddress);
124-
return new URI(uri.getScheme(), uri.getUserInfo(), addressAsHostname, uri.getPort(), uri.getPath(), uri.getQuery(), uri.getFragment());
125-
}
126-
catch (UnknownHostException e) {
127-
throw new UncheckedIOException(e);
128-
}
129-
catch (URISyntaxException e) {
130-
throw new RuntimeException(e);
131-
}
132-
}
78+
install(new InternalCommunicationForDiscoveryModule());
13379
}
13480
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* Licensed under the Apache License, Version 2.0 (the "License");
3+
* you may not use this file except in compliance with the License.
4+
* You may obtain a copy of the License at
5+
*
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* Unless required by applicable law or agreed to in writing, software
9+
* distributed under the License is distributed on an "AS IS" BASIS,
10+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
* See the License for the specific language governing permissions and
12+
* limitations under the License.
13+
*/
14+
package io.trino.node;
15+
16+
import com.google.inject.Binder;
17+
import com.google.inject.multibindings.Multibinder;
18+
import io.airlift.configuration.AbstractConfigurationAwareModule;
19+
import io.airlift.discovery.client.ForDiscoveryClient;
20+
import io.airlift.http.client.HttpClientConfig;
21+
import io.airlift.http.client.HttpRequestFilter;
22+
import io.airlift.http.client.Request;
23+
import io.trino.server.InternalAuthenticationManager;
24+
import io.trino.server.InternalCommunicationConfig;
25+
26+
import java.io.UncheckedIOException;
27+
import java.net.InetAddress;
28+
import java.net.URI;
29+
import java.net.URISyntaxException;
30+
import java.net.UnknownHostException;
31+
32+
import static com.google.inject.multibindings.Multibinder.newSetBinder;
33+
import static io.airlift.configuration.ConfigBinder.configBinder;
34+
import static io.airlift.node.AddressToHostname.encodeAddressAsHostname;
35+
import static io.trino.server.InternalCommunicationHttpClientModule.configureClient;
36+
37+
public class InternalCommunicationForDiscoveryModule
38+
extends AbstractConfigurationAwareModule
39+
{
40+
@Override
41+
protected void setup(Binder binder)
42+
{
43+
InternalCommunicationConfig internalCommunicationConfig = buildConfigObject(InternalCommunicationConfig.class);
44+
Multibinder<HttpRequestFilter> discoveryFilterBinder = newSetBinder(binder, HttpRequestFilter.class, ForDiscoveryClient.class);
45+
if (internalCommunicationConfig.isHttpsRequired() && internalCommunicationConfig.getKeyStorePath() == null && internalCommunicationConfig.getTrustStorePath() == null) {
46+
discoveryFilterBinder.addBinding().to(DiscoveryEncodeAddressAsHostname.class);
47+
}
48+
configBinder(binder).bindConfigDefaults(HttpClientConfig.class, ForDiscoveryClient.class, config -> configureClient(config, internalCommunicationConfig));
49+
discoveryFilterBinder.addBinding().to(InternalAuthenticationManager.class);
50+
}
51+
52+
private static class DiscoveryEncodeAddressAsHostname
53+
implements HttpRequestFilter
54+
{
55+
@Override
56+
public Request filterRequest(Request request)
57+
{
58+
return Request.Builder.fromRequest(request)
59+
.setUri(toIpEncodedAsHostnameUri(request.getUri()))
60+
.build();
61+
}
62+
63+
private static URI toIpEncodedAsHostnameUri(URI uri)
64+
{
65+
if (!uri.getScheme().equals("https")) {
66+
return uri;
67+
}
68+
try {
69+
String host = uri.getHost();
70+
InetAddress inetAddress = InetAddress.getByName(host);
71+
String addressAsHostname = encodeAddressAsHostname(inetAddress);
72+
return new URI(uri.getScheme(), uri.getUserInfo(), addressAsHostname, uri.getPort(), uri.getPath(), uri.getQuery(), uri.getFragment());
73+
}
74+
catch (UnknownHostException e) {
75+
throw new UncheckedIOException(e);
76+
}
77+
catch (URISyntaxException e) {
78+
throw new RuntimeException(e);
79+
}
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)