Search in sources :

Example 1 with MEGABYTE

use of io.airlift.units.DataSize.Unit.MEGABYTE in project presto by prestodb.

the class ServerMainModule method setup.

@Override
protected void setup(Binder binder) {
    ServerConfig serverConfig = buildConfigObject(ServerConfig.class);
    if (serverConfig.isCoordinator()) {
        install(new CoordinatorModule());
        binder.bind(new TypeLiteral<Optional<QueryPerformanceFetcher>>() {
        }).toProvider(QueryPerformanceFetcherProvider.class).in(Scopes.SINGLETON);
    } else {
        binder.bind(new TypeLiteral<Optional<QueryPerformanceFetcher>>() {
        }).toInstance(Optional.empty());
        // Install no-op resource group manager on workers, since only coordinators manage resource groups.
        binder.bind(ResourceGroupManager.class).to(NoOpResourceGroupManager.class).in(Scopes.SINGLETON);
        // HACK: this binding is needed by SystemConnectorModule, but will only be used on the coordinator
        binder.bind(QueryManager.class).toInstance(newProxy(QueryManager.class, (proxy, method, args) -> {
            throw new UnsupportedOperationException();
        }));
    }
    configBinder(binder).bindConfig(FeaturesConfig.class);
    binder.bind(SqlParser.class).in(Scopes.SINGLETON);
    binder.bind(SqlParserOptions.class).toInstance(sqlParserOptions);
    bindFailureDetector(binder, serverConfig.isCoordinator());
    jaxrsBinder(binder).bind(ThrowableMapper.class);
    configBinder(binder).bindConfig(QueryManagerConfig.class);
    jsonCodecBinder(binder).bindJsonCodec(ViewDefinition.class);
    // session properties
    binder.bind(SessionPropertyManager.class).in(Scopes.SINGLETON);
    binder.bind(SystemSessionProperties.class).in(Scopes.SINGLETON);
    // schema properties
    binder.bind(SchemaPropertyManager.class).in(Scopes.SINGLETON);
    // table properties
    binder.bind(TablePropertyManager.class).in(Scopes.SINGLETON);
    // node manager
    discoveryBinder(binder).bindSelector("presto");
    binder.bind(DiscoveryNodeManager.class).in(Scopes.SINGLETON);
    binder.bind(InternalNodeManager.class).to(DiscoveryNodeManager.class).in(Scopes.SINGLETON);
    newExporter(binder).export(DiscoveryNodeManager.class).withGeneratedName();
    httpClientBinder(binder).bindHttpClient("node-manager", ForNodeManager.class).withTracing().withConfigDefaults(config -> {
        config.setIdleTimeout(new Duration(30, SECONDS));
        config.setRequestTimeout(new Duration(10, SECONDS));
    });
    // node scheduler
    // TODO: remove from NodePartitioningManager and move to CoordinatorModule
    configBinder(binder).bindConfig(NodeSchedulerConfig.class);
    binder.bind(NodeScheduler.class).in(Scopes.SINGLETON);
    binder.bind(NodeSchedulerExporter.class).in(Scopes.SINGLETON);
    binder.bind(NodeTaskMap.class).in(Scopes.SINGLETON);
    newExporter(binder).export(NodeScheduler.class).withGeneratedName();
    // network topology
    // TODO: move to CoordinatorModule when NodeScheduler is moved
    install(installModuleIf(NodeSchedulerConfig.class, config -> LEGACY.equalsIgnoreCase(config.getNetworkTopology()), moduleBinder -> moduleBinder.bind(NetworkTopology.class).to(LegacyNetworkTopology.class).in(Scopes.SINGLETON)));
    install(installModuleIf(NodeSchedulerConfig.class, config -> FLAT.equalsIgnoreCase(config.getNetworkTopology()), moduleBinder -> moduleBinder.bind(NetworkTopology.class).to(FlatNetworkTopology.class).in(Scopes.SINGLETON)));
    // task execution
    jaxrsBinder(binder).bind(TaskResource.class);
    newExporter(binder).export(TaskResource.class).withGeneratedName();
    binder.bind(TaskManager.class).to(SqlTaskManager.class).in(Scopes.SINGLETON);
    // workaround for CodeCache GC issue
    if (JavaVersion.current().getMajor() == 8) {
        configBinder(binder).bindConfig(CodeCacheGcConfig.class);
        binder.bind(CodeCacheGcTrigger.class).in(Scopes.SINGLETON);
    }
    // Add monitoring for JVM pauses
    binder.bind(PauseMeter.class).in(Scopes.SINGLETON);
    newExporter(binder).export(PauseMeter.class).withGeneratedName();
    configBinder(binder).bindConfig(MemoryManagerConfig.class);
    configBinder(binder).bindConfig(NodeMemoryConfig.class);
    configBinder(binder).bindConfig(ReservedSystemMemoryConfig.class);
    binder.bind(LocalMemoryManager.class).in(Scopes.SINGLETON);
    binder.bind(LocalMemoryManagerExporter.class).in(Scopes.SINGLETON);
    newExporter(binder).export(TaskManager.class).withGeneratedName();
    binder.bind(TaskExecutor.class).in(Scopes.SINGLETON);
    newExporter(binder).export(TaskExecutor.class).withGeneratedName();
    binder.bind(LocalExecutionPlanner.class).in(Scopes.SINGLETON);
    configBinder(binder).bindConfig(CompilerConfig.class);
    binder.bind(ExpressionCompiler.class).in(Scopes.SINGLETON);
    newExporter(binder).export(ExpressionCompiler.class).withGeneratedName();
    configBinder(binder).bindConfig(TaskManagerConfig.class);
    binder.bind(IndexJoinLookupStats.class).in(Scopes.SINGLETON);
    newExporter(binder).export(IndexJoinLookupStats.class).withGeneratedName();
    binder.bind(AsyncHttpExecutionMBean.class).in(Scopes.SINGLETON);
    newExporter(binder).export(AsyncHttpExecutionMBean.class).withGeneratedName();
    binder.bind(JoinFilterFunctionCompiler.class).in(Scopes.SINGLETON);
    newExporter(binder).export(JoinFilterFunctionCompiler.class).withGeneratedName();
    binder.bind(JoinCompiler.class).in(Scopes.SINGLETON);
    newExporter(binder).export(JoinCompiler.class).withGeneratedName();
    binder.bind(OrderingCompiler.class).in(Scopes.SINGLETON);
    newExporter(binder).export(OrderingCompiler.class).withGeneratedName();
    binder.bind(PagesIndex.Factory.class).to(PagesIndex.DefaultFactory.class);
    binder.bind(JoinProbeCompiler.class).in(Scopes.SINGLETON);
    newExporter(binder).export(JoinProbeCompiler.class).withGeneratedName();
    binder.bind(LookupJoinOperators.class).in(Scopes.SINGLETON);
    jsonCodecBinder(binder).bindJsonCodec(TaskStatus.class);
    jsonCodecBinder(binder).bindJsonCodec(StageInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(TaskInfo.class);
    jaxrsBinder(binder).bind(PagesResponseWriter.class);
    // exchange client
    binder.bind(new TypeLiteral<ExchangeClientSupplier>() {
    }).to(ExchangeClientFactory.class).in(Scopes.SINGLETON);
    httpClientBinder(binder).bindHttpClient("exchange", ForExchange.class).withTracing().withConfigDefaults(config -> {
        config.setIdleTimeout(new Duration(30, SECONDS));
        config.setRequestTimeout(new Duration(10, SECONDS));
        config.setMaxConnectionsPerServer(250);
        config.setMaxContentLength(new DataSize(32, MEGABYTE));
    });
    configBinder(binder).bindConfig(ExchangeClientConfig.class);
    binder.bind(ExchangeExecutionMBean.class).in(Scopes.SINGLETON);
    newExporter(binder).export(ExchangeExecutionMBean.class).withGeneratedName();
    // execution
    binder.bind(LocationFactory.class).to(HttpLocationFactory.class).in(Scopes.SINGLETON);
    // memory manager
    jaxrsBinder(binder).bind(MemoryResource.class);
    jsonCodecBinder(binder).bindJsonCodec(MemoryInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(MemoryPoolAssignmentsRequest.class);
    // transaction manager
    configBinder(binder).bindConfig(TransactionManagerConfig.class);
    // data stream provider
    binder.bind(PageSourceManager.class).in(Scopes.SINGLETON);
    binder.bind(PageSourceProvider.class).to(PageSourceManager.class).in(Scopes.SINGLETON);
    // page sink provider
    binder.bind(PageSinkManager.class).in(Scopes.SINGLETON);
    binder.bind(PageSinkProvider.class).to(PageSinkManager.class).in(Scopes.SINGLETON);
    // metadata
    binder.bind(StaticCatalogStore.class).in(Scopes.SINGLETON);
    configBinder(binder).bindConfig(StaticCatalogStoreConfig.class);
    binder.bind(MetadataManager.class).in(Scopes.SINGLETON);
    binder.bind(Metadata.class).to(MetadataManager.class).in(Scopes.SINGLETON);
    // type
    binder.bind(TypeRegistry.class).in(Scopes.SINGLETON);
    binder.bind(TypeManager.class).to(TypeRegistry.class).in(Scopes.SINGLETON);
    jsonBinder(binder).addDeserializerBinding(Type.class).to(TypeDeserializer.class);
    newSetBinder(binder, Type.class);
    // split manager
    binder.bind(SplitManager.class).in(Scopes.SINGLETON);
    // node partitioning manager
    binder.bind(NodePartitioningManager.class).in(Scopes.SINGLETON);
    // index manager
    binder.bind(IndexManager.class).in(Scopes.SINGLETON);
    // handle resolver
    binder.install(new HandleJsonModule());
    // connector
    binder.bind(ConnectorManager.class).in(Scopes.SINGLETON);
    // system connector
    binder.install(new SystemConnectorModule());
    // splits
    jsonCodecBinder(binder).bindJsonCodec(TaskUpdateRequest.class);
    jsonCodecBinder(binder).bindJsonCodec(ConnectorSplit.class);
    jsonBinder(binder).addSerializerBinding(Slice.class).to(SliceSerializer.class);
    jsonBinder(binder).addDeserializerBinding(Slice.class).to(SliceDeserializer.class);
    jsonBinder(binder).addSerializerBinding(Expression.class).to(ExpressionSerializer.class);
    jsonBinder(binder).addDeserializerBinding(Expression.class).to(ExpressionDeserializer.class);
    jsonBinder(binder).addDeserializerBinding(FunctionCall.class).to(FunctionCallDeserializer.class);
    // query monitor
    configBinder(binder).bindConfig(QueryMonitorConfig.class);
    binder.bind(QueryMonitor.class).in(Scopes.SINGLETON);
    // Determine the NodeVersion
    String prestoVersion = serverConfig.getPrestoVersion();
    if (prestoVersion == null) {
        prestoVersion = getClass().getPackage().getImplementationVersion();
    }
    checkState(prestoVersion != null, "presto.version must be provided when it cannot be automatically determined");
    NodeVersion nodeVersion = new NodeVersion(prestoVersion);
    binder.bind(NodeVersion.class).toInstance(nodeVersion);
    // presto announcement
    discoveryBinder(binder).bindHttpAnnouncement("presto").addProperty("node_version", nodeVersion.toString()).addProperty("coordinator", String.valueOf(serverConfig.isCoordinator())).addProperty("connectorIds", nullToEmpty(serverConfig.getDataSources()));
    // server info resource
    jaxrsBinder(binder).bind(ServerInfoResource.class);
    // plugin manager
    binder.bind(PluginManager.class).in(Scopes.SINGLETON);
    configBinder(binder).bindConfig(PluginManagerConfig.class);
    binder.bind(CatalogManager.class).in(Scopes.SINGLETON);
    // optimizers
    binder.bind(PlanOptimizers.class).in(Scopes.SINGLETON);
    // block encodings
    binder.bind(BlockEncodingManager.class).in(Scopes.SINGLETON);
    binder.bind(BlockEncodingSerde.class).to(BlockEncodingManager.class).in(Scopes.SINGLETON);
    newSetBinder(binder, new TypeLiteral<BlockEncodingFactory<?>>() {
    });
    jsonBinder(binder).addSerializerBinding(Block.class).to(BlockJsonSerde.Serializer.class);
    jsonBinder(binder).addDeserializerBinding(Block.class).to(BlockJsonSerde.Deserializer.class);
    // thread visualizer
    jaxrsBinder(binder).bind(ThreadResource.class);
    // PageSorter
    binder.bind(PageSorter.class).to(PagesIndexPageSorter.class).in(Scopes.SINGLETON);
    // PageIndexer
    binder.bind(PageIndexerFactory.class).to(GroupByHashPageIndexerFactory.class).in(Scopes.SINGLETON);
    // Finalizer
    binder.bind(FinalizerService.class).in(Scopes.SINGLETON);
    // Spiller
    binder.bind(SpillerFactory.class).to(BinarySpillerFactory.class).in(Scopes.SINGLETON);
    newExporter(binder).export(SpillerFactory.class).withGeneratedName();
}
Also used : TypeManager(com.facebook.presto.spi.type.TypeManager) PageSourceProvider(com.facebook.presto.split.PageSourceProvider) TaskStatus(com.facebook.presto.execution.TaskStatus) JoinProbeCompiler(com.facebook.presto.sql.gen.JoinProbeCompiler) TypeRegistry(com.facebook.presto.type.TypeRegistry) NodeInfo(io.airlift.node.NodeInfo) ForNodeManager(com.facebook.presto.metadata.ForNodeManager) PauseMeter(io.airlift.stats.PauseMeter) QueryPerformanceFetcher(com.facebook.presto.execution.QueryPerformanceFetcher) Executors.newSingleThreadScheduledExecutor(java.util.concurrent.Executors.newSingleThreadScheduledExecutor) StageInfo(com.facebook.presto.execution.StageInfo) InternalNodeManager(com.facebook.presto.metadata.InternalNodeManager) FinalizerService(com.facebook.presto.util.FinalizerService) BoundedExecutor(io.airlift.concurrent.BoundedExecutor) Executors.newScheduledThreadPool(java.util.concurrent.Executors.newScheduledThreadPool) LocalMemoryManager(com.facebook.presto.memory.LocalMemoryManager) Multibinder.newSetBinder(com.google.inject.multibindings.Multibinder.newSetBinder) QueryManagerConfig(com.facebook.presto.execution.QueryManagerConfig) DiscoveryNodeManager(com.facebook.presto.metadata.DiscoveryNodeManager) JsonCodecBinder.jsonCodecBinder(io.airlift.json.JsonCodecBinder.jsonCodecBinder) PageSinkManager(com.facebook.presto.split.PageSinkManager) FlatNetworkTopology(com.facebook.presto.execution.scheduler.FlatNetworkTopology) Set(java.util.Set) ExpressionDeserializer(com.facebook.presto.sql.Serialization.ExpressionDeserializer) FeaturesConfig(com.facebook.presto.sql.analyzer.FeaturesConfig) HttpClientBinder.httpClientBinder(io.airlift.http.client.HttpClientBinder.httpClientBinder) FLAT(com.facebook.presto.execution.scheduler.NodeSchedulerConfig.NetworkTopologyType.FLAT) DiscoveryBinder.discoveryBinder(io.airlift.discovery.client.DiscoveryBinder.discoveryBinder) ConfigBinder.configBinder(io.airlift.configuration.ConfigBinder.configBinder) TypeLiteral(com.google.inject.TypeLiteral) SystemSessionProperties(com.facebook.presto.SystemSessionProperties) Reflection.newProxy(com.google.common.reflect.Reflection.newProxy) Slice(io.airlift.slice.Slice) ViewDefinition(com.facebook.presto.metadata.ViewDefinition) MEGABYTE(io.airlift.units.DataSize.Unit.MEGABYTE) MemoryResource(com.facebook.presto.memory.MemoryResource) ReservedSystemMemoryConfig(com.facebook.presto.memory.ReservedSystemMemoryConfig) LookupJoinOperators(com.facebook.presto.operator.LookupJoinOperators) StaticCatalogStore(com.facebook.presto.metadata.StaticCatalogStore) SqlTaskManager(com.facebook.presto.execution.SqlTaskManager) Binder(com.google.inject.Binder) Type(com.facebook.presto.spi.type.Type) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExchangeClientFactory(com.facebook.presto.operator.ExchangeClientFactory) PageSorter(com.facebook.presto.spi.PageSorter) NetworkTopology(com.facebook.presto.execution.scheduler.NetworkTopology) IndexJoinLookupStats(com.facebook.presto.operator.index.IndexJoinLookupStats) TransactionManager(com.facebook.presto.transaction.TransactionManager) ResourceGroupManager(com.facebook.presto.execution.resourceGroups.ResourceGroupManager) QueryMonitorConfig(com.facebook.presto.event.query.QueryMonitorConfig) BinarySpillerFactory(com.facebook.presto.spiller.BinarySpillerFactory) SystemConnectorModule(com.facebook.presto.connector.system.SystemConnectorModule) LocationFactory(com.facebook.presto.execution.LocationFactory) ConnectorSplit(com.facebook.presto.spi.ConnectorSplit) StaticCatalogStoreConfig(com.facebook.presto.metadata.StaticCatalogStoreConfig) SpillerFactory(com.facebook.presto.spiller.SpillerFactory) TaskInfo(com.facebook.presto.execution.TaskInfo) Metadata(com.facebook.presto.metadata.Metadata) LocalExecutionPlanner(com.facebook.presto.sql.planner.LocalExecutionPlanner) TablePropertyManager(com.facebook.presto.metadata.TablePropertyManager) Block(com.facebook.presto.spi.block.Block) SqlParserOptions(com.facebook.presto.sql.parser.SqlParserOptions) NodeTaskMap(com.facebook.presto.execution.NodeTaskMap) MetadataManager(com.facebook.presto.metadata.MetadataManager) NodeVersion(com.facebook.presto.client.NodeVersion) NodeScheduler(com.facebook.presto.execution.scheduler.NodeScheduler) JsonBinder.jsonBinder(io.airlift.json.JsonBinder.jsonBinder) TaskManagerConfig(com.facebook.presto.execution.TaskManagerConfig) NoOpResourceGroupManager(com.facebook.presto.execution.resourceGroups.NoOpResourceGroupManager) Duration(io.airlift.units.Duration) PagesIndex(com.facebook.presto.operator.PagesIndex) MemoryPoolAssignmentsRequest(com.facebook.presto.memory.MemoryPoolAssignmentsRequest) ConnectorManager(com.facebook.presto.connector.ConnectorManager) ExportBinder.newExporter(org.weakref.jmx.guice.ExportBinder.newExporter) HandleJsonModule(com.facebook.presto.metadata.HandleJsonModule) PageIndexerFactory(com.facebook.presto.spi.PageIndexerFactory) QueryMonitor(com.facebook.presto.event.query.QueryMonitor) FunctionCall(com.facebook.presto.sql.tree.FunctionCall) ImmutableSet(com.google.common.collect.ImmutableSet) ConditionalModule.installModuleIf(io.airlift.configuration.ConditionalModule.installModuleIf) NodeMemoryConfig(com.facebook.presto.memory.NodeMemoryConfig) ForExchange(com.facebook.presto.operator.ForExchange) NodeSchedulerExporter(com.facebook.presto.execution.scheduler.NodeSchedulerExporter) BlockEncodingFactory(com.facebook.presto.spi.block.BlockEncodingFactory) SplitManager(com.facebook.presto.split.SplitManager) LEGACY(com.facebook.presto.execution.scheduler.NodeSchedulerConfig.NetworkTopologyType.LEGACY) SchemaPropertyManager(com.facebook.presto.metadata.SchemaPropertyManager) SqlParser(com.facebook.presto.sql.parser.SqlParser) Preconditions.checkState(com.google.common.base.Preconditions.checkState) ExchangeClientConfig(com.facebook.presto.operator.ExchangeClientConfig) DataSize(io.airlift.units.DataSize) ServiceDescriptor(io.airlift.discovery.client.ServiceDescriptor) TransactionManagerConfig(com.facebook.presto.transaction.TransactionManagerConfig) JaxrsBinder.jaxrsBinder(io.airlift.jaxrs.JaxrsBinder.jaxrsBinder) Optional(java.util.Optional) ExpressionCompiler(com.facebook.presto.sql.gen.ExpressionCompiler) NodeSchedulerConfig(com.facebook.presto.execution.scheduler.NodeSchedulerConfig) Strings.nullToEmpty(com.google.common.base.Strings.nullToEmpty) PageSinkProvider(com.facebook.presto.split.PageSinkProvider) ForTransactionManager(com.facebook.presto.transaction.ForTransactionManager) QueryManager(com.facebook.presto.execution.QueryManager) Singleton(javax.inject.Singleton) MemoryInfo(com.facebook.presto.memory.MemoryInfo) BlockJsonSerde(com.facebook.presto.block.BlockJsonSerde) PlanOptimizers(com.facebook.presto.sql.planner.PlanOptimizers) HttpLocationFactory(com.facebook.presto.server.remotetask.HttpLocationFactory) LegacyNetworkTopology(com.facebook.presto.execution.scheduler.LegacyNetworkTopology) BlockEncodingSerde(com.facebook.presto.spi.block.BlockEncodingSerde) AbstractConfigurationAwareModule(io.airlift.configuration.AbstractConfigurationAwareModule) PageSourceManager(com.facebook.presto.split.PageSourceManager) OrderingCompiler(com.facebook.presto.sql.gen.OrderingCompiler) Threads.daemonThreadsNamed(io.airlift.concurrent.Threads.daemonThreadsNamed) TaskManager(com.facebook.presto.execution.TaskManager) LocalMemoryManagerExporter(com.facebook.presto.memory.LocalMemoryManagerExporter) Objects.requireNonNull(java.util.Objects.requireNonNull) IndexManager(com.facebook.presto.index.IndexManager) MemoryManagerConfig(com.facebook.presto.memory.MemoryManagerConfig) SessionPropertyManager(com.facebook.presto.metadata.SessionPropertyManager) FunctionCallDeserializer(com.facebook.presto.sql.Serialization.FunctionCallDeserializer) ExecutorService(java.util.concurrent.ExecutorService) PagesIndexPageSorter(com.facebook.presto.PagesIndexPageSorter) NodePartitioningManager(com.facebook.presto.sql.planner.NodePartitioningManager) ExchangeClientSupplier(com.facebook.presto.operator.ExchangeClientSupplier) TaskExecutor(com.facebook.presto.execution.TaskExecutor) JoinFilterFunctionCompiler(com.facebook.presto.sql.gen.JoinFilterFunctionCompiler) Scopes(com.google.inject.Scopes) CatalogManager(com.facebook.presto.metadata.CatalogManager) CompilerConfig(com.facebook.presto.sql.planner.CompilerConfig) QueryPerformanceFetcherProvider(com.facebook.presto.execution.QueryPerformanceFetcherProvider) FailureDetectorModule(com.facebook.presto.failureDetector.FailureDetectorModule) TypeDeserializer(com.facebook.presto.type.TypeDeserializer) Provides(com.google.inject.Provides) Expression(com.facebook.presto.sql.tree.Expression) Executors.newCachedThreadPool(java.util.concurrent.Executors.newCachedThreadPool) FailureDetector(com.facebook.presto.failureDetector.FailureDetector) ExpressionSerializer(com.facebook.presto.sql.Serialization.ExpressionSerializer) GroupByHashPageIndexerFactory(com.facebook.presto.GroupByHashPageIndexerFactory) ServerInfo(com.facebook.presto.client.ServerInfo) JoinCompiler(com.facebook.presto.sql.gen.JoinCompiler) SECONDS(java.util.concurrent.TimeUnit.SECONDS) BlockEncodingManager(com.facebook.presto.block.BlockEncodingManager) TypeRegistry(com.facebook.presto.type.TypeRegistry) PageSourceManager(com.facebook.presto.split.PageSourceManager) NodeVersion(com.facebook.presto.client.NodeVersion) PagesIndexPageSorter(com.facebook.presto.PagesIndexPageSorter) ExchangeClientFactory(com.facebook.presto.operator.ExchangeClientFactory) QueryPerformanceFetcher(com.facebook.presto.execution.QueryPerformanceFetcher) DataSize(io.airlift.units.DataSize) QueryMonitor(com.facebook.presto.event.query.QueryMonitor) SessionPropertyManager(com.facebook.presto.metadata.SessionPropertyManager) OrderingCompiler(com.facebook.presto.sql.gen.OrderingCompiler) ExchangeClientSupplier(com.facebook.presto.operator.ExchangeClientSupplier) NodeScheduler(com.facebook.presto.execution.scheduler.NodeScheduler) NoOpResourceGroupManager(com.facebook.presto.execution.resourceGroups.NoOpResourceGroupManager) SqlParserOptions(com.facebook.presto.sql.parser.SqlParserOptions) JoinCompiler(com.facebook.presto.sql.gen.JoinCompiler) QueryPerformanceFetcherProvider(com.facebook.presto.execution.QueryPerformanceFetcherProvider) Optional(java.util.Optional) IndexJoinLookupStats(com.facebook.presto.operator.index.IndexJoinLookupStats) StaticCatalogStore(com.facebook.presto.metadata.StaticCatalogStore) NodeTaskMap(com.facebook.presto.execution.NodeTaskMap) HttpLocationFactory(com.facebook.presto.server.remotetask.HttpLocationFactory) SqlParser(com.facebook.presto.sql.parser.SqlParser) Duration(io.airlift.units.Duration) PauseMeter(io.airlift.stats.PauseMeter) IndexManager(com.facebook.presto.index.IndexManager) SqlTaskManager(com.facebook.presto.execution.SqlTaskManager) TaskExecutor(com.facebook.presto.execution.TaskExecutor) BlockEncodingManager(com.facebook.presto.block.BlockEncodingManager) BlockJsonSerde(com.facebook.presto.block.BlockJsonSerde) Slice(io.airlift.slice.Slice) LegacyNetworkTopology(com.facebook.presto.execution.scheduler.LegacyNetworkTopology) BinarySpillerFactory(com.facebook.presto.spiller.BinarySpillerFactory) Block(com.facebook.presto.spi.block.Block) ExpressionCompiler(com.facebook.presto.sql.gen.ExpressionCompiler) PlanOptimizers(com.facebook.presto.sql.planner.PlanOptimizers) GroupByHashPageIndexerFactory(com.facebook.presto.GroupByHashPageIndexerFactory) NodeSchedulerConfig(com.facebook.presto.execution.scheduler.NodeSchedulerConfig) ExchangeClientFactory(com.facebook.presto.operator.ExchangeClientFactory) BinarySpillerFactory(com.facebook.presto.spiller.BinarySpillerFactory) LocationFactory(com.facebook.presto.execution.LocationFactory) SpillerFactory(com.facebook.presto.spiller.SpillerFactory) PageIndexerFactory(com.facebook.presto.spi.PageIndexerFactory) BlockEncodingFactory(com.facebook.presto.spi.block.BlockEncodingFactory) HttpLocationFactory(com.facebook.presto.server.remotetask.HttpLocationFactory) GroupByHashPageIndexerFactory(com.facebook.presto.GroupByHashPageIndexerFactory) BlockEncodingFactory(com.facebook.presto.spi.block.BlockEncodingFactory) PagesIndex(com.facebook.presto.operator.PagesIndex) LocalMemoryManagerExporter(com.facebook.presto.memory.LocalMemoryManagerExporter) NodePartitioningManager(com.facebook.presto.sql.planner.NodePartitioningManager) JoinProbeCompiler(com.facebook.presto.sql.gen.JoinProbeCompiler) TypeLiteral(com.google.inject.TypeLiteral) LocalMemoryManager(com.facebook.presto.memory.LocalMemoryManager) HandleJsonModule(com.facebook.presto.metadata.HandleJsonModule) SystemConnectorModule(com.facebook.presto.connector.system.SystemConnectorModule) FunctionCall(com.facebook.presto.sql.tree.FunctionCall) SchemaPropertyManager(com.facebook.presto.metadata.SchemaPropertyManager) LookupJoinOperators(com.facebook.presto.operator.LookupJoinOperators) PageSinkManager(com.facebook.presto.split.PageSinkManager) LocalExecutionPlanner(com.facebook.presto.sql.planner.LocalExecutionPlanner) FlatNetworkTopology(com.facebook.presto.execution.scheduler.FlatNetworkTopology) JoinFilterFunctionCompiler(com.facebook.presto.sql.gen.JoinFilterFunctionCompiler) NodeSchedulerExporter(com.facebook.presto.execution.scheduler.NodeSchedulerExporter) BinarySpillerFactory(com.facebook.presto.spiller.BinarySpillerFactory) SpillerFactory(com.facebook.presto.spiller.SpillerFactory) ConnectorManager(com.facebook.presto.connector.ConnectorManager) SplitManager(com.facebook.presto.split.SplitManager) CatalogManager(com.facebook.presto.metadata.CatalogManager) Type(com.facebook.presto.spi.type.Type) SqlTaskManager(com.facebook.presto.execution.SqlTaskManager) TaskManager(com.facebook.presto.execution.TaskManager) MetadataManager(com.facebook.presto.metadata.MetadataManager) Expression(com.facebook.presto.sql.tree.Expression) FinalizerService(com.facebook.presto.util.FinalizerService) QueryManager(com.facebook.presto.execution.QueryManager) TablePropertyManager(com.facebook.presto.metadata.TablePropertyManager) DiscoveryNodeManager(com.facebook.presto.metadata.DiscoveryNodeManager) SystemSessionProperties(com.facebook.presto.SystemSessionProperties)

Example 2 with MEGABYTE

use of io.airlift.units.DataSize.Unit.MEGABYTE in project presto by prestodb.

the class TestMemoryPools method testBlocking.

@Test
public void testBlocking() throws Exception {
    Session session = testSessionBuilder().setCatalog("tpch").setSchema("tiny").setSystemProperty("task_default_concurrency", "1").build();
    LocalQueryRunner localQueryRunner = queryRunnerWithInitialTransaction(session);
    // add tpch
    localQueryRunner.createCatalog("tpch", new TpchConnectorFactory(1), ImmutableMap.of());
    // reserve all the memory in the pool
    MemoryPool pool = new MemoryPool(new MemoryPoolId("test"), new DataSize(10, MEGABYTE));
    QueryId fakeQueryId = new QueryId("fake");
    assertTrue(pool.tryReserve(fakeQueryId, TEN_MEGABYTES));
    MemoryPool systemPool = new MemoryPool(new MemoryPoolId("testSystem"), new DataSize(10, MEGABYTE));
    QueryContext queryContext = new QueryContext(new QueryId("query"), new DataSize(10, MEGABYTE), pool, systemPool, localQueryRunner.getExecutor());
    // discard all output
    OutputFactory outputFactory = new PageConsumerOutputFactory(types -> (page -> {
    }));
    TaskContext taskContext = createTaskContext(queryContext, localQueryRunner.getExecutor(), session);
    List<Driver> drivers = localQueryRunner.createDrivers("SELECT COUNT(*) FROM orders JOIN lineitem USING (orderkey)", outputFactory, taskContext);
    // run driver, until it blocks
    while (!isWaitingForMemory(drivers)) {
        for (Driver driver : drivers) {
            driver.process();
        }
    }
    // driver should be blocked waiting for memory
    for (Driver driver : drivers) {
        assertFalse(driver.isFinished());
    }
    assertTrue(pool.getFreeBytes() <= 0);
    pool.free(fakeQueryId, TEN_MEGABYTES);
    do {
        assertFalse(isWaitingForMemory(drivers));
        boolean progress = false;
        for (Driver driver : drivers) {
            ListenableFuture<?> blocked = driver.process();
            progress = progress | blocked.isDone();
        }
        // query should not block
        assertTrue(progress);
    } while (!drivers.stream().allMatch(Driver::isFinished));
}
Also used : LocalQueryRunner(com.facebook.presto.testing.LocalQueryRunner) PageConsumerOutputFactory(com.facebook.presto.testing.PageConsumerOperator.PageConsumerOutputFactory) TaskContext(com.facebook.presto.operator.TaskContext) ListenableFuture(com.google.common.util.concurrent.ListenableFuture) TestingTaskContext.createTaskContext(com.facebook.presto.testing.TestingTaskContext.createTaskContext) ImmutableMap(com.google.common.collect.ImmutableMap) Session(com.facebook.presto.Session) MEGABYTE(io.airlift.units.DataSize.Unit.MEGABYTE) TpchConnectorFactory(com.facebook.presto.tpch.TpchConnectorFactory) OutputFactory(com.facebook.presto.operator.OutputFactory) Test(org.testng.annotations.Test) Driver(com.facebook.presto.operator.Driver) TestingSession.testSessionBuilder(com.facebook.presto.testing.TestingSession.testSessionBuilder) MemoryPoolId(com.facebook.presto.spi.memory.MemoryPoolId) DataSize(io.airlift.units.DataSize) List(java.util.List) QueryId(com.facebook.presto.spi.QueryId) Assert.assertTrue(org.testng.Assert.assertTrue) LocalQueryRunner.queryRunnerWithInitialTransaction(com.facebook.presto.testing.LocalQueryRunner.queryRunnerWithInitialTransaction) OperatorContext(com.facebook.presto.operator.OperatorContext) Assert.assertFalse(org.testng.Assert.assertFalse) TpchConnectorFactory(com.facebook.presto.tpch.TpchConnectorFactory) TaskContext(com.facebook.presto.operator.TaskContext) TestingTaskContext.createTaskContext(com.facebook.presto.testing.TestingTaskContext.createTaskContext) PageConsumerOutputFactory(com.facebook.presto.testing.PageConsumerOperator.PageConsumerOutputFactory) QueryId(com.facebook.presto.spi.QueryId) Driver(com.facebook.presto.operator.Driver) LocalQueryRunner(com.facebook.presto.testing.LocalQueryRunner) DataSize(io.airlift.units.DataSize) PageConsumerOutputFactory(com.facebook.presto.testing.PageConsumerOperator.PageConsumerOutputFactory) OutputFactory(com.facebook.presto.operator.OutputFactory) MemoryPoolId(com.facebook.presto.spi.memory.MemoryPoolId) Session(com.facebook.presto.Session) Test(org.testng.annotations.Test)

Aggregations

DataSize (io.airlift.units.DataSize)2 MEGABYTE (io.airlift.units.DataSize.Unit.MEGABYTE)2 GroupByHashPageIndexerFactory (com.facebook.presto.GroupByHashPageIndexerFactory)1 PagesIndexPageSorter (com.facebook.presto.PagesIndexPageSorter)1 Session (com.facebook.presto.Session)1 SystemSessionProperties (com.facebook.presto.SystemSessionProperties)1 BlockEncodingManager (com.facebook.presto.block.BlockEncodingManager)1 BlockJsonSerde (com.facebook.presto.block.BlockJsonSerde)1 NodeVersion (com.facebook.presto.client.NodeVersion)1 ServerInfo (com.facebook.presto.client.ServerInfo)1 ConnectorManager (com.facebook.presto.connector.ConnectorManager)1 SystemConnectorModule (com.facebook.presto.connector.system.SystemConnectorModule)1 QueryMonitor (com.facebook.presto.event.query.QueryMonitor)1 QueryMonitorConfig (com.facebook.presto.event.query.QueryMonitorConfig)1 LocationFactory (com.facebook.presto.execution.LocationFactory)1 NodeTaskMap (com.facebook.presto.execution.NodeTaskMap)1 QueryManager (com.facebook.presto.execution.QueryManager)1 QueryManagerConfig (com.facebook.presto.execution.QueryManagerConfig)1 QueryPerformanceFetcher (com.facebook.presto.execution.QueryPerformanceFetcher)1 QueryPerformanceFetcherProvider (com.facebook.presto.execution.QueryPerformanceFetcherProvider)1