Search in sources :

Example 1 with ClassLoaderSafeConnectorAccessControl

use of io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorAccessControl in project carbondata by apache.

the class InternalCarbonDataConnectorFactory method createConnector.

public static Connector createConnector(String catalogName, Map<String, String> config, ConnectorContext context, Module module, Optional<HiveMetastore> metastore) {
    requireNonNull(config, "config is null");
    ClassLoader classLoader = InternalCarbonDataConnectorFactory.class.getClassLoader();
    try (ThreadContextClassLoader ignored = new ThreadContextClassLoader(classLoader)) {
        Bootstrap app = new Bootstrap(new EventModule(), new MBeanModule(), new ConnectorObjectNameGeneratorModule(catalogName, "io.prestosql.plugin.carbondata", "presto.plugin.carbondata"), new JsonModule(), new CarbondataModule(), new HiveS3Module(), new HiveGcsModule(), new HiveAzureModule(), installModuleIf(RubixEnabledConfig.class, RubixEnabledConfig::isCacheEnabled, new RubixModule()), new HiveMetastoreModule(metastore), new HiveSecurityModule(catalogName), new HiveAuthenticationModule(), new HiveProcedureModule(), new MBeanServerModule(), binder -> {
            binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getNodeManager().getCurrentNode().getVersion()));
            binder.bind(NodeManager.class).toInstance(context.getNodeManager());
            binder.bind(VersionEmbedder.class).toInstance(context.getVersionEmbedder());
            binder.bind(TypeManager.class).toInstance(context.getTypeManager());
            binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory());
            binder.bind(PageSorter.class).toInstance(context.getPageSorter());
            binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName));
            configBinder(binder).bindConfig(CarbonTableConfig.class);
        }, binder -> newSetBinder(binder, EventListener.class), module);
        Injector injector = app.strictConfig().doNotInitializeLogging().setRequiredConfigurationProperties(config).initialize();
        if (injector.getInstance(RubixEnabledConfig.class).isCacheEnabled()) {
            // RubixInitializer needs ConfigurationInitializers, hence kept outside RubixModule
            RubixInitializer rubixInitializer = injector.getInstance(RubixInitializer.class);
            rubixInitializer.initializeRubix(context.getNodeManager());
        }
        LifeCycleManager lifeCycleManager = injector.getInstance(LifeCycleManager.class);
        HiveMetadataFactory metadataFactory = injector.getInstance(HiveMetadataFactory.class);
        HiveTransactionManager transactionManager = injector.getInstance(HiveTransactionManager.class);
        ConnectorSplitManager splitManager = injector.getInstance(ConnectorSplitManager.class);
        ConnectorPageSourceProvider connectorPageSource = injector.getInstance(ConnectorPageSourceProvider.class);
        ConnectorPageSinkProvider pageSinkProvider = injector.getInstance(ConnectorPageSinkProvider.class);
        ConnectorNodePartitioningProvider connectorDistributionProvider = injector.getInstance(ConnectorNodePartitioningProvider.class);
        HiveSessionProperties hiveSessionProperties = injector.getInstance(HiveSessionProperties.class);
        HiveTableProperties hiveTableProperties = injector.getInstance(HiveTableProperties.class);
        HiveAnalyzeProperties hiveAnalyzeProperties = injector.getInstance(HiveAnalyzeProperties.class);
        ConnectorAccessControl accessControl = new ClassLoaderSafeConnectorAccessControl(new SystemTableAwareAccessControl(injector.getInstance(ConnectorAccessControl.class)), classLoader);
        Set<Procedure> procedures = injector.getInstance(Key.get(new TypeLiteral<Set<Procedure>>() {
        }));
        Set<SystemTable> systemTables = injector.getInstance(Key.get(new TypeLiteral<Set<SystemTable>>() {
        }));
        Set<EventListener> eventListeners = injector.getInstance(Key.get(new TypeLiteral<Set<EventListener>>() {
        })).stream().map(listener -> new ClassLoaderSafeEventListener(listener, classLoader)).collect(toImmutableSet());
        return new CarbonDataConnector(lifeCycleManager, metadataFactory, transactionManager, new ClassLoaderSafeConnectorSplitManager(splitManager, classLoader), new ClassLoaderSafeConnectorPageSourceProvider(connectorPageSource, classLoader), new ClassLoaderSafeConnectorPageSinkProvider(pageSinkProvider, classLoader), new ClassLoaderSafeNodePartitioningProvider(connectorDistributionProvider, classLoader), systemTables, procedures, eventListeners, hiveSessionProperties.getSessionProperties(), HiveSchemaProperties.SCHEMA_PROPERTIES, hiveTableProperties.getTableProperties(), hiveAnalyzeProperties.getAnalyzeProperties(), accessControl, classLoader);
    }
}
Also used : HiveProcedureModule(io.prestosql.plugin.hive.procedure.HiveProcedureModule) Module(com.google.inject.Module) VersionEmbedder(io.prestosql.spi.VersionEmbedder) ConnectorAccessControl(io.prestosql.spi.connector.ConnectorAccessControl) MBeanModule(org.weakref.jmx.guice.MBeanModule) HiveProcedureModule(io.prestosql.plugin.hive.procedure.HiveProcedureModule) HiveAnalyzeProperties(io.prestosql.plugin.hive.HiveAnalyzeProperties) ConnectorSplitManager(io.prestosql.spi.connector.ConnectorSplitManager) Key(com.google.inject.Key) RubixModule(io.prestosql.plugin.hive.rubix.RubixModule) HiveSecurityModule(io.prestosql.plugin.hive.security.HiveSecurityModule) HiveS3Module(io.prestosql.plugin.hive.s3.HiveS3Module) HiveMetadataFactory(io.prestosql.plugin.hive.HiveMetadataFactory) HiveAuthenticationModule(io.prestosql.plugin.hive.authentication.HiveAuthenticationModule) Procedure(io.prestosql.spi.procedure.Procedure) CarbonTableConfig(org.apache.carbondata.presto.impl.CarbonTableConfig) NodeVersion(io.prestosql.plugin.hive.NodeVersion) SystemTableAwareAccessControl(io.prestosql.plugin.hive.security.SystemTableAwareAccessControl) ConnectorNodePartitioningProvider(io.prestosql.spi.connector.ConnectorNodePartitioningProvider) Map(java.util.Map) Multibinder.newSetBinder(com.google.inject.multibindings.Multibinder.newSetBinder) ConnectorPageSinkProvider(io.prestosql.spi.connector.ConnectorPageSinkProvider) HiveGcsModule(io.prestosql.plugin.hive.gcs.HiveGcsModule) PageIndexerFactory(io.prestosql.spi.PageIndexerFactory) ConditionalModule.installModuleIf(io.airlift.configuration.ConditionalModule.installModuleIf) SystemTable(io.prestosql.spi.connector.SystemTable) HiveMetastoreModule(io.prestosql.plugin.hive.metastore.HiveMetastoreModule) LifeCycleManager(io.airlift.bootstrap.LifeCycleManager) Set(java.util.Set) ClassLoaderSafeConnectorPageSourceProvider(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider) ClassLoaderSafeConnectorAccessControl(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorAccessControl) Bootstrap(io.airlift.bootstrap.Bootstrap) Optional(java.util.Optional) ConfigBinder.configBinder(io.airlift.configuration.ConfigBinder.configBinder) TypeLiteral(com.google.inject.TypeLiteral) ClassLoaderSafeConnectorSplitManager(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager) Connector(io.prestosql.spi.connector.Connector) HiveSessionProperties(io.prestosql.plugin.hive.HiveSessionProperties) ConnectorContext(io.prestosql.spi.connector.ConnectorContext) ClassLoaderSafeNodePartitioningProvider(io.prestosql.plugin.base.classloader.ClassLoaderSafeNodePartitioningProvider) EventModule(io.airlift.event.client.EventModule) HiveTransactionManager(io.prestosql.plugin.hive.HiveTransactionManager) ConnectorObjectNameGeneratorModule(io.prestosql.plugin.base.jmx.ConnectorObjectNameGeneratorModule) RubixEnabledConfig(io.prestosql.plugin.hive.rubix.RubixEnabledConfig) Objects.requireNonNull(java.util.Objects.requireNonNull) ImmutableSet.toImmutableSet(com.google.common.collect.ImmutableSet.toImmutableSet) RubixInitializer(io.prestosql.plugin.hive.rubix.RubixInitializer) HiveMetastore(io.prestosql.plugin.hive.metastore.HiveMetastore) CatalogName(io.prestosql.plugin.base.CatalogName) HiveSchemaProperties(io.prestosql.plugin.hive.HiveSchemaProperties) MBeanServerModule(io.prestosql.plugin.base.jmx.MBeanServerModule) HiveTableProperties(io.prestosql.plugin.hive.HiveTableProperties) HiveAzureModule(io.prestosql.plugin.hive.azure.HiveAzureModule) TypeManager(io.prestosql.spi.type.TypeManager) ThreadContextClassLoader(io.prestosql.spi.classloader.ThreadContextClassLoader) PageSorter(io.prestosql.spi.PageSorter) Injector(com.google.inject.Injector) ClassLoaderSafeConnectorPageSinkProvider(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorPageSinkProvider) EventListener(io.prestosql.spi.eventlistener.EventListener) NodeManager(io.prestosql.spi.NodeManager) ClassLoaderSafeEventListener(io.prestosql.plugin.base.classloader.ClassLoaderSafeEventListener) ConnectorPageSourceProvider(io.prestosql.spi.connector.ConnectorPageSourceProvider) JsonModule(io.airlift.json.JsonModule) ClassLoaderSafeEventListener(io.prestosql.plugin.base.classloader.ClassLoaderSafeEventListener) NodeVersion(io.prestosql.plugin.hive.NodeVersion) ClassLoaderSafeConnectorPageSourceProvider(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider) Injector(com.google.inject.Injector) PageSorter(io.prestosql.spi.PageSorter) Procedure(io.prestosql.spi.procedure.Procedure) HiveMetastoreModule(io.prestosql.plugin.hive.metastore.HiveMetastoreModule) HiveAnalyzeProperties(io.prestosql.plugin.hive.HiveAnalyzeProperties) ClassLoaderSafeNodePartitioningProvider(io.prestosql.plugin.base.classloader.ClassLoaderSafeNodePartitioningProvider) ConnectorAccessControl(io.prestosql.spi.connector.ConnectorAccessControl) ClassLoaderSafeConnectorAccessControl(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorAccessControl) RubixModule(io.prestosql.plugin.hive.rubix.RubixModule) ClassLoaderSafeConnectorPageSinkProvider(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorPageSinkProvider) JsonModule(io.airlift.json.JsonModule) PageIndexerFactory(io.prestosql.spi.PageIndexerFactory) NodeManager(io.prestosql.spi.NodeManager) LifeCycleManager(io.airlift.bootstrap.LifeCycleManager) ConnectorSplitManager(io.prestosql.spi.connector.ConnectorSplitManager) ClassLoaderSafeConnectorSplitManager(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager) SystemTableAwareAccessControl(io.prestosql.plugin.hive.security.SystemTableAwareAccessControl) ClassLoaderSafeConnectorAccessControl(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorAccessControl) MBeanModule(org.weakref.jmx.guice.MBeanModule) HiveMetadataFactory(io.prestosql.plugin.hive.HiveMetadataFactory) Set(java.util.Set) ImmutableSet.toImmutableSet(com.google.common.collect.ImmutableSet.toImmutableSet) EventModule(io.airlift.event.client.EventModule) ConnectorObjectNameGeneratorModule(io.prestosql.plugin.base.jmx.ConnectorObjectNameGeneratorModule) HiveSessionProperties(io.prestosql.plugin.hive.HiveSessionProperties) TypeLiteral(com.google.inject.TypeLiteral) RubixInitializer(io.prestosql.plugin.hive.rubix.RubixInitializer) HiveSecurityModule(io.prestosql.plugin.hive.security.HiveSecurityModule) ThreadContextClassLoader(io.prestosql.spi.classloader.ThreadContextClassLoader) Bootstrap(io.airlift.bootstrap.Bootstrap) EventListener(io.prestosql.spi.eventlistener.EventListener) ClassLoaderSafeEventListener(io.prestosql.plugin.base.classloader.ClassLoaderSafeEventListener) ThreadContextClassLoader(io.prestosql.spi.classloader.ThreadContextClassLoader) HiveAzureModule(io.prestosql.plugin.hive.azure.HiveAzureModule) HiveTableProperties(io.prestosql.plugin.hive.HiveTableProperties) HiveAuthenticationModule(io.prestosql.plugin.hive.authentication.HiveAuthenticationModule) RubixEnabledConfig(io.prestosql.plugin.hive.rubix.RubixEnabledConfig) VersionEmbedder(io.prestosql.spi.VersionEmbedder) HiveS3Module(io.prestosql.plugin.hive.s3.HiveS3Module) ConnectorPageSinkProvider(io.prestosql.spi.connector.ConnectorPageSinkProvider) ClassLoaderSafeConnectorPageSinkProvider(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorPageSinkProvider) HiveGcsModule(io.prestosql.plugin.hive.gcs.HiveGcsModule) ClassLoaderSafeConnectorPageSourceProvider(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider) ConnectorPageSourceProvider(io.prestosql.spi.connector.ConnectorPageSourceProvider) MBeanServerModule(io.prestosql.plugin.base.jmx.MBeanServerModule) ConnectorNodePartitioningProvider(io.prestosql.spi.connector.ConnectorNodePartitioningProvider) ClassLoaderSafeConnectorSplitManager(io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager) TypeManager(io.prestosql.spi.type.TypeManager) CatalogName(io.prestosql.plugin.base.CatalogName) SystemTable(io.prestosql.spi.connector.SystemTable) HiveTransactionManager(io.prestosql.plugin.hive.HiveTransactionManager)

Aggregations

ImmutableSet.toImmutableSet (com.google.common.collect.ImmutableSet.toImmutableSet)1 Injector (com.google.inject.Injector)1 Key (com.google.inject.Key)1 Module (com.google.inject.Module)1 TypeLiteral (com.google.inject.TypeLiteral)1 Multibinder.newSetBinder (com.google.inject.multibindings.Multibinder.newSetBinder)1 Bootstrap (io.airlift.bootstrap.Bootstrap)1 LifeCycleManager (io.airlift.bootstrap.LifeCycleManager)1 ConditionalModule.installModuleIf (io.airlift.configuration.ConditionalModule.installModuleIf)1 ConfigBinder.configBinder (io.airlift.configuration.ConfigBinder.configBinder)1 EventModule (io.airlift.event.client.EventModule)1 JsonModule (io.airlift.json.JsonModule)1 CatalogName (io.prestosql.plugin.base.CatalogName)1 ClassLoaderSafeConnectorAccessControl (io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorAccessControl)1 ClassLoaderSafeConnectorPageSinkProvider (io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorPageSinkProvider)1 ClassLoaderSafeConnectorPageSourceProvider (io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider)1 ClassLoaderSafeConnectorSplitManager (io.prestosql.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager)1 ClassLoaderSafeEventListener (io.prestosql.plugin.base.classloader.ClassLoaderSafeEventListener)1 ClassLoaderSafeNodePartitioningProvider (io.prestosql.plugin.base.classloader.ClassLoaderSafeNodePartitioningProvider)1 ConnectorObjectNameGeneratorModule (io.prestosql.plugin.base.jmx.ConnectorObjectNameGeneratorModule)1