Skip to content

Commit 1fb8471

Browse files
andythsuebyhr
authored andcommitted
Use OptionalBinder for RoutingManager
1 parent c3a84c2 commit 1fb8471

File tree

5 files changed

+42
-123
lines changed

5 files changed

+42
-123
lines changed

gateway-ha/src/main/java/io/trino/gateway/baseapp/BaseApp.java

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import io.trino.gateway.ha.config.HaGatewayConfiguration;
2525
import io.trino.gateway.ha.handler.ProxyHandlerStats;
2626
import io.trino.gateway.ha.handler.RoutingTargetHandler;
27-
import io.trino.gateway.ha.module.RouterBaseModule;
28-
import io.trino.gateway.ha.module.StochasticRoutingManagerProvider;
2927
import io.trino.gateway.ha.resource.EntityEditorResource;
3028
import io.trino.gateway.ha.resource.GatewayHealthCheckResource;
3129
import io.trino.gateway.ha.resource.GatewayResource;
@@ -36,7 +34,9 @@
3634
import io.trino.gateway.ha.resource.PublicResource;
3735
import io.trino.gateway.ha.resource.TrinoResource;
3836
import io.trino.gateway.ha.router.ForRouter;
37+
import io.trino.gateway.ha.router.RoutingManager;
3938
import io.trino.gateway.ha.router.RoutingRulesManager;
39+
import io.trino.gateway.ha.router.StochasticRoutingManager;
4040
import io.trino.gateway.ha.security.AuthorizedExceptionMapper;
4141
import io.trino.gateway.proxyserver.ForProxy;
4242
import io.trino.gateway.proxyserver.ProxyRequestHandler;
@@ -47,9 +47,8 @@
4747
import java.lang.reflect.Constructor;
4848
import java.util.ArrayList;
4949
import java.util.List;
50-
import java.util.Optional;
5150

52-
import static com.google.common.collect.MoreCollectors.toOptional;
51+
import static com.google.inject.multibindings.OptionalBinder.newOptionalBinder;
5352
import static io.airlift.http.client.HttpClientBinder.httpClientBinder;
5453
import static io.airlift.jaxrs.JaxrsBinder.jaxrsBinder;
5554
import static java.lang.String.format;
@@ -91,18 +90,6 @@ private static Module newModule(String clazz, HaGatewayConfiguration configurati
9190
return null;
9291
}
9392

94-
private static void addDefaultRouterProviderModules(List<Module> modules, HaGatewayConfiguration configuration)
95-
{
96-
Optional<Module> routerProvider = modules.stream()
97-
.filter(module -> module instanceof RouterBaseModule)
98-
.collect(toOptional());
99-
if (routerProvider.isEmpty()) {
100-
logger.warn("Router provider doesn't exist in the config, using the StochasticRoutingManagerProvider");
101-
String clazz = StochasticRoutingManagerProvider.class.getCanonicalName();
102-
modules.add(newModule(clazz, configuration));
103-
}
104-
}
105-
10693
public static List<Module> addModules(HaGatewayConfiguration configuration)
10794
{
10895
List<Module> modules = new ArrayList<>();
@@ -115,8 +102,6 @@ public static List<Module> addModules(HaGatewayConfiguration configuration)
115102
modules.add(newModule(clazz, configuration));
116103
}
117104
}
118-
addDefaultRouterProviderModules(modules, configuration);
119-
120105
return modules;
121106
}
122107

@@ -148,6 +133,10 @@ public void configure(Binder binder)
148133
newExporter(binder).export(ProxyHandlerStats.class).withGeneratedName();
149134
binder.bind(RoutingRulesManager.class);
150135
binder.bind(ClusterMetricsStatsExporter.class).in(Scopes.SINGLETON);
136+
newOptionalBinder(binder, RoutingManager.class)
137+
.setDefault()
138+
.to(StochasticRoutingManager.class)
139+
.in(Scopes.SINGLETON);
151140
}
152141

153142
private static void addManagedApps(HaGatewayConfiguration configuration, Binder binder)

gateway-ha/src/main/java/io/trino/gateway/ha/module/HaGatewayProviderModule.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,15 @@
3939
import io.trino.gateway.ha.config.RoutingRulesConfiguration;
4040
import io.trino.gateway.ha.config.RulesExternalConfiguration;
4141
import io.trino.gateway.ha.config.UserConfiguration;
42+
import io.trino.gateway.ha.persistence.JdbcConnectionManager;
4243
import io.trino.gateway.ha.router.BackendStateManager;
4344
import io.trino.gateway.ha.router.ForRouter;
45+
import io.trino.gateway.ha.router.GatewayBackendManager;
46+
import io.trino.gateway.ha.router.HaGatewayManager;
47+
import io.trino.gateway.ha.router.HaQueryHistoryManager;
48+
import io.trino.gateway.ha.router.HaResourceGroupsManager;
49+
import io.trino.gateway.ha.router.QueryHistoryManager;
50+
import io.trino.gateway.ha.router.ResourceGroupsManager;
4451
import io.trino.gateway.ha.router.RoutingGroupSelector;
4552
import io.trino.gateway.ha.router.RoutingManager;
4653
import io.trino.gateway.ha.security.ApiAuthenticator;
@@ -59,6 +66,7 @@
5966
import io.trino.gateway.ha.security.util.Authorizer;
6067
import io.trino.gateway.ha.security.util.ChainedAuthFilter;
6168
import jakarta.ws.rs.container.ContainerRequestFilter;
69+
import org.jdbi.v3.core.Jdbi;
6270

6371
import java.util.List;
6472
import java.util.Map;
@@ -77,11 +85,17 @@ public class HaGatewayProviderModule
7785
private final BackendStateManager backendStateConnectionManager;
7886
private final ResourceSecurityDynamicFeature resourceSecurityDynamicFeature;
7987
private final HaGatewayConfiguration configuration;
88+
private final ResourceGroupsManager resourceGroupsManager;
89+
private final GatewayBackendManager gatewayBackendManager;
90+
private final QueryHistoryManager queryHistoryManager;
8091

8192
@Override
8293
protected void configure()
8394
{
8495
jaxrsBinder(binder()).bindInstance(resourceSecurityDynamicFeature);
96+
binder().bind(ResourceGroupsManager.class).toInstance(resourceGroupsManager);
97+
binder().bind(GatewayBackendManager.class).toInstance(gatewayBackendManager);
98+
binder().bind(QueryHistoryManager.class).toInstance(queryHistoryManager);
8599
}
86100

87101
public HaGatewayProviderModule(HaGatewayConfiguration configuration)
@@ -101,6 +115,12 @@ public HaGatewayProviderModule(HaGatewayConfiguration configuration)
101115

102116
OAuth2GatewayCookieConfigurationPropertiesProvider oAuth2GatewayCookieConfigurationPropertiesProvider = OAuth2GatewayCookieConfigurationPropertiesProvider.getInstance();
103117
oAuth2GatewayCookieConfigurationPropertiesProvider.initialize(configuration.getOauth2GatewayCookieConfiguration());
118+
119+
Jdbi jdbi = Jdbi.create(configuration.getDataStore().getJdbcUrl(), configuration.getDataStore().getUser(), configuration.getDataStore().getPassword());
120+
JdbcConnectionManager connectionManager = new JdbcConnectionManager(jdbi, configuration.getDataStore());
121+
resourceGroupsManager = new HaResourceGroupsManager(connectionManager);
122+
gatewayBackendManager = new HaGatewayManager(jdbi);
123+
queryHistoryManager = new HaQueryHistoryManager(jdbi, configuration.getDataStore().getJdbcUrl().startsWith("jdbc:oracle"));
104124
}
105125

106126
private LbOAuthManager getOAuthManager(HaGatewayConfiguration configuration)
@@ -253,6 +273,7 @@ public List<TrinoClusterStatsObserver> getClusterStatsObservers(
253273
}
254274

255275
@Provides
276+
@Singleton
256277
public MonitorConfiguration getMonitorConfiguration()
257278
{
258279
return configuration.getMonitor();

gateway-ha/src/main/java/io/trino/gateway/ha/module/QueryCountBasedRouterProvider.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,33 @@
1313
*/
1414
package io.trino.gateway.ha.module;
1515

16+
import com.google.inject.AbstractModule;
1617
import com.google.inject.Scopes;
18+
import io.airlift.log.Logger;
1719
import io.trino.gateway.ha.config.HaGatewayConfiguration;
1820
import io.trino.gateway.ha.router.QueryCountBasedRouter;
1921
import io.trino.gateway.ha.router.RoutingManager;
2022

23+
import static com.google.inject.multibindings.OptionalBinder.newOptionalBinder;
24+
2125
public class QueryCountBasedRouterProvider
22-
extends RouterBaseModule
26+
extends AbstractModule
2327
{
28+
private static final Logger logger = Logger.get(QueryCountBasedRouterProvider.class);
29+
30+
// We require all modules to take HaGatewayConfiguration as the only parameter
2431
public QueryCountBasedRouterProvider(HaGatewayConfiguration configuration)
2532
{
26-
super(configuration);
33+
// no-op
2734
}
2835

2936
@Override
3037
public void configure()
3138
{
32-
bind(RoutingManager.class).to(QueryCountBasedRouter.class).in(Scopes.SINGLETON);
39+
logger.info("Using QueryCountBasedRouterProvider instead of default");
40+
newOptionalBinder(binder(), RoutingManager.class)
41+
.setBinding()
42+
.to(QueryCountBasedRouter.class)
43+
.in(Scopes.SINGLETON);
3344
}
3445
}

gateway-ha/src/main/java/io/trino/gateway/ha/module/RouterBaseModule.java

Lines changed: 0 additions & 68 deletions
This file was deleted.

gateway-ha/src/main/java/io/trino/gateway/ha/module/StochasticRoutingManagerProvider.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)