use of com.facebook.airlift.discovery.server.EmbeddedDiscoveryModule in project presto by prestodb.
the class CoordinatorModule method setup.
@Override
protected void setup(Binder binder) {
httpServerBinder(binder).bindResource("/ui", "webapp").withWelcomeFile("index.html");
httpServerBinder(binder).bindResource("/tableau", "webapp/tableau");
// discovery server
install(installModuleIf(EmbeddedDiscoveryConfig.class, EmbeddedDiscoveryConfig::isEnabled, new EmbeddedDiscoveryModule()));
// presto coordinator announcement
discoveryBinder(binder).bindHttpAnnouncement("presto-coordinator");
// statement resource
jsonCodecBinder(binder).bindJsonCodec(QueryInfo.class);
jsonCodecBinder(binder).bindJsonCodec(TaskInfo.class);
jsonCodecBinder(binder).bindJsonCodec(QueryResults.class);
jsonCodecBinder(binder).bindJsonCodec(SelectedRole.class);
jaxrsBinder(binder).bind(QueuedStatementResource.class);
jaxrsBinder(binder).bind(ExecutingStatementResource.class);
binder.bind(StatementHttpExecutionMBean.class).in(Scopes.SINGLETON);
newExporter(binder).export(StatementHttpExecutionMBean.class).withGeneratedName();
// resource for serving static content
jaxrsBinder(binder).bind(WebUiResource.class);
// failure detector
binder.install(new FailureDetectorModule());
jaxrsBinder(binder).bind(NodeResource.class);
jaxrsBinder(binder).bind(WorkerResource.class);
httpClientBinder(binder).bindHttpClient("workerInfo", ForWorkerInfo.class);
// query monitor
jsonCodecBinder(binder).bindJsonCodec(OperatorInfo.class);
configBinder(binder).bindConfig(QueryMonitorConfig.class);
binder.bind(QueryMonitor.class).in(Scopes.SINGLETON);
// query manager
jaxrsBinder(binder).bind(QueryResource.class);
jaxrsBinder(binder).bind(StageResource.class);
jaxrsBinder(binder).bind(QueryStateInfoResource.class);
jaxrsBinder(binder).bind(ResourceGroupStateInfoResource.class);
binder.bind(QueryIdGenerator.class).in(Scopes.SINGLETON);
binder.bind(QueryManager.class).to(SqlQueryManager.class).in(Scopes.SINGLETON);
newExporter(binder).export(QueryManager.class).withGeneratedName();
binder.bind(QueryPreparer.class).in(Scopes.SINGLETON);
binder.bind(SessionSupplier.class).to(QuerySessionSupplier.class).in(Scopes.SINGLETON);
binder.bind(InternalResourceGroupManager.class).in(Scopes.SINGLETON);
newExporter(binder).export(InternalResourceGroupManager.class).withGeneratedName();
binder.bind(ResourceGroupManager.class).to(InternalResourceGroupManager.class);
binder.bind(LegacyResourceGroupConfigurationManager.class).in(Scopes.SINGLETON);
binder.bind(RetryCircuitBreaker.class).in(Scopes.SINGLETON);
newExporter(binder).export(RetryCircuitBreaker.class).withGeneratedName();
binder.bind(LocalQueryProvider.class).in(Scopes.SINGLETON);
jaxrsBinder(binder).bind(TaskInfoResource.class);
// dispatcher
binder.bind(DispatchManager.class).in(Scopes.SINGLETON);
binder.bind(FailedDispatchQueryFactory.class).in(Scopes.SINGLETON);
binder.bind(DispatchExecutor.class).in(Scopes.SINGLETON);
// local dispatcher
binder.bind(DispatchQueryFactory.class).to(LocalDispatchQueryFactory.class);
// cluster memory manager
binder.bind(ClusterMemoryManager.class).in(Scopes.SINGLETON);
binder.bind(ClusterMemoryPoolManager.class).to(ClusterMemoryManager.class).in(Scopes.SINGLETON);
httpClientBinder(binder).bindHttpClient("memoryManager", ForMemoryManager.class).withTracing().withConfigDefaults(config -> {
config.setRequestTimeout(new Duration(10, SECONDS));
});
bindLowMemoryKiller(LowMemoryKillerPolicy.NONE, NoneLowMemoryKiller.class);
bindLowMemoryKiller(LowMemoryKillerPolicy.TOTAL_RESERVATION, TotalReservationLowMemoryKiller.class);
bindLowMemoryKiller(LowMemoryKillerPolicy.TOTAL_RESERVATION_ON_BLOCKED_NODES, TotalReservationOnBlockedNodesLowMemoryKiller.class);
newExporter(binder).export(ClusterMemoryManager.class).withGeneratedName();
// node monitor
binder.bind(ClusterSizeMonitor.class).in(Scopes.SINGLETON);
// statistics calculator
binder.install(new StatsCalculatorModule());
// cost calculator
binder.bind(TaskCountEstimator.class).in(Scopes.SINGLETON);
binder.bind(CostCalculator.class).to(CostCalculatorUsingExchanges.class).in(Scopes.SINGLETON);
binder.bind(CostCalculator.class).annotatedWith(EstimatedExchanges.class).to(CostCalculatorWithEstimatedExchanges.class).in(Scopes.SINGLETON);
binder.bind(CostComparator.class).in(Scopes.SINGLETON);
// cluster statistics
jaxrsBinder(binder).bind(ClusterStatsResource.class);
// planner
binder.bind(PlanFragmenter.class).in(Scopes.SINGLETON);
binder.bind(PlanOptimizers.class).in(Scopes.SINGLETON);
// query explainer
binder.bind(QueryExplainer.class).in(Scopes.SINGLETON);
// explain analyze
binder.bind(ExplainAnalyzeContext.class).in(Scopes.SINGLETON);
// execution scheduler
binder.bind(RemoteTaskFactory.class).to(HttpRemoteTaskFactory.class).in(Scopes.SINGLETON);
newExporter(binder).export(RemoteTaskFactory.class).withGeneratedName();
binder.bind(RemoteTaskStats.class).in(Scopes.SINGLETON);
newExporter(binder).export(RemoteTaskStats.class).withGeneratedName();
httpClientBinder(binder).bindHttpClient("scheduler", ForScheduler.class).withTracing().withFilter(GenerateTraceTokenRequestFilter.class).withConfigDefaults(config -> {
config.setRequestTimeout(new Duration(10, SECONDS));
config.setMaxConnectionsPerServer(250);
});
binder.bind(ScheduledExecutorService.class).annotatedWith(ForScheduler.class).toInstance(newSingleThreadScheduledExecutor(threadsNamed("stage-scheduler")));
// query execution
binder.bind(ExecutorService.class).annotatedWith(ForQueryExecution.class).toInstance(newCachedThreadPool(threadsNamed("query-execution-%s")));
binder.bind(QueryExecutionMBean.class).in(Scopes.SINGLETON);
newExporter(binder).export(QueryExecutionMBean.class).as(generatedNameOf(QueryExecution.class));
MapBinder<Class<? extends Statement>, QueryExecutionFactory<?>> executionBinder = newMapBinder(binder, new TypeLiteral<Class<? extends Statement>>() {
}, new TypeLiteral<QueryExecution.QueryExecutionFactory<?>>() {
});
binder.bind(SplitSchedulerStats.class).in(Scopes.SINGLETON);
newExporter(binder).export(SplitSchedulerStats.class).withGeneratedName();
binder.bind(SqlQueryExecutionFactory.class).in(Scopes.SINGLETON);
binder.bind(SectionExecutionFactory.class).in(Scopes.SINGLETON);
Set<Map.Entry<Class<? extends Statement>, QueryType>> queryTypes = getAllQueryTypes().entrySet();
// bind sql query statements to SqlQueryExecutionFactory
queryTypes.stream().filter(entry -> entry.getValue() != QueryType.DATA_DEFINITION).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(SqlQueryExecutionFactory.class).in(Scopes.SINGLETON));
binder.bind(PartialResultQueryManager.class).in(Scopes.SINGLETON);
// bind data definition statements to DataDefinitionExecutionFactory
queryTypes.stream().filter(entry -> entry.getValue() == QueryType.DATA_DEFINITION && !isSessionTransactionControlStatement(entry.getKey())).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(DDLDefinitionExecutionFactory.class).in(Scopes.SINGLETON));
binder.bind(DDLDefinitionExecutionFactory.class).in(Scopes.SINGLETON);
// bind session Control statements to SessionTransactionExecutionFactory
queryTypes.stream().filter(entry -> (entry.getValue() == QueryType.DATA_DEFINITION && isSessionTransactionControlStatement(entry.getKey()))).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(SessionDefinitionExecutionFactory.class).in(Scopes.SINGLETON));
binder.bind(SessionDefinitionExecutionFactory.class).in(Scopes.SINGLETON);
// helper class binding data definition tasks and statements
PrestoDataDefBindingHelper.bindDDLDefinitionTasks(binder);
PrestoDataDefBindingHelper.bindTransactionControlDefinitionTasks(binder);
MapBinder<String, ExecutionPolicy> executionPolicyBinder = newMapBinder(binder, String.class, ExecutionPolicy.class);
executionPolicyBinder.addBinding("all-at-once").to(AllAtOnceExecutionPolicy.class);
executionPolicyBinder.addBinding("phased").to(PhasedExecutionPolicy.class);
configBinder(binder).bindConfig(NodeResourceStatusConfig.class);
binder.bind(NodeResourceStatusProvider.class).to(NodeResourceStatus.class).in(Scopes.SINGLETON);
newOptionalBinder(binder, ResourceManagerProxy.class);
install(installModuleIf(ServerConfig.class, ServerConfig::isResourceManagerEnabled, rmBinder -> {
httpClientBinder(rmBinder).bindHttpClient("resourceManager", ForResourceManager.class);
rmBinder.bind(ResourceManagerProxy.class).in(Scopes.SINGLETON);
}));
// cleanup
binder.bind(ExecutorCleanup.class).in(Scopes.SINGLETON);
}
use of com.facebook.airlift.discovery.server.EmbeddedDiscoveryModule in project presto by prestodb.
the class ResourceManagerModule method setup.
@Override
protected void setup(Binder binder) {
// discovery server
install(installModuleIf(EmbeddedDiscoveryConfig.class, EmbeddedDiscoveryConfig::isEnabled, new EmbeddedDiscoveryModule()));
// presto coordinator announcement
discoveryBinder(binder).bindHttpAnnouncement("presto-resource-manager");
// statement resource
jsonCodecBinder(binder).bindJsonCodec(QueryInfo.class);
// resource for serving static content
jaxrsBinder(binder).bind(WebUiResource.class);
// failure detector
binder.install(new FailureDetectorModule());
jaxrsBinder(binder).bind(NodeResource.class);
jaxrsBinder(binder).bind(WorkerResource.class);
httpClientBinder(binder).bindHttpClient("workerInfo", ForWorkerInfo.class);
// TODO: decouple query-level configuration that is not needed for Resource Manager
binder.bind(QueryManager.class).to(NoOpQueryManager.class).in(Scopes.SINGLETON);
jaxrsBinder(binder).bind(DistributedResourceGroupInfoResource.class);
binder.bind(QueryIdGenerator.class).in(Scopes.SINGLETON);
binder.bind(QueryPreparer.class).in(Scopes.SINGLETON);
binder.bind(SessionSupplier.class).to(QuerySessionSupplier.class).in(Scopes.SINGLETON);
binder.bind(ResourceGroupManager.class).to(NoOpResourceGroupManager.class);
jsonCodecBinder(binder).bindJsonCodec(QueryInfo.class);
smileCodecBinder(binder).bindSmileCodec(QueryInfo.class);
jsonCodecBinder(binder).bindJsonCodec(BasicQueryInfo.class);
smileCodecBinder(binder).bindSmileCodec(BasicQueryInfo.class);
jsonCodecBinder(binder).bindListJsonCodec(QueryStateInfo.class);
jsonCodecBinder(binder).bindJsonCodec(ResourceGroupInfo.class);
binder.bind(TransactionManager.class).to(NoOpTransactionManager.class);
binder.bind(ResourceManagerClusterStateProvider.class).in(Scopes.SINGLETON);
driftServerBinder(binder).bindService(ResourceManagerServer.class);
binder.bind(NodeResourceStatusProvider.class).toInstance(() -> true);
jaxrsBinder(binder).bind(DistributedQueryResource.class);
jaxrsBinder(binder).bind(DistributedQueryInfoResource.class);
jaxrsBinder(binder).bind(DistributedClusterStatsResource.class);
httpClientBinder(binder).bindHttpClient("resourceManager", ForResourceManager.class);
binder.bind(ResourceManagerProxy.class).in(Scopes.SINGLETON);
jsonBinder(binder).addSerializerBinding(Duration.class).to(DurationSerializer.class);
jsonBinder(binder).addSerializerBinding(DataSize.class).to(DataSizeSerializer.class);
}
Aggregations