Search in sources :

Example 16 with Plugin

use of io.trino.spi.Plugin in project TiBigData by tidb-incubator.

the class ConnectorsPluginTest method testCreateConnector.

@Test
public void testCreateConnector() {
    Plugin plugin = new ConnectorsPlugin();
    ConnectorFactory factory = getOnlyElement(plugin.getConnectorFactories());
    factory.create("tidb", ConfigUtils.getProperties(), new TestingConnectorContext());
}
Also used : ConnectorFactory(io.trino.spi.connector.ConnectorFactory) ConnectorsPlugin(io.tidb.bigdata.trino.ConnectorsPlugin) TestingConnectorContext(io.trino.testing.TestingConnectorContext) Plugin(io.trino.spi.Plugin) ConnectorsPlugin(io.tidb.bigdata.trino.ConnectorsPlugin) Test(org.junit.Test) IntegrationTest(io.tidb.bigdata.test.IntegrationTest)

Example 17 with Plugin

use of io.trino.spi.Plugin in project trino by trinodb.

the class TestJmxStats method testJmxStatsExposure.

@Test
public void testJmxStatsExposure() throws Exception {
    Plugin plugin = new JdbcPlugin("base-jdbc", new TestingH2JdbcModule());
    ConnectorFactory factory = getOnlyElement(plugin.getConnectorFactories());
    factory.create("test", ImmutableMap.of("connection-url", "jdbc:driver:"), new TestingConnectorContext());
    MBeanServer mbeanServer = getPlatformMBeanServer();
    Set<ObjectName> objectNames = mbeanServer.queryNames(new ObjectName("io.trino.plugin.jdbc:*"), null);
    assertTrue(objectNames.containsAll(ImmutableSet.of(new ObjectName("io.trino.plugin.jdbc:type=ConnectionFactory,name=test"), new ObjectName("io.trino.plugin.jdbc:type=JdbcClient,name=test"))));
    for (ObjectName objectName : objectNames) {
        MBeanInfo mbeanInfo = mbeanServer.getMBeanInfo(objectName);
        assertNotEquals(mbeanInfo.getAttributes().length, 0, format("Object %s doesn't expose JMX stats", objectName.getCanonicalName()));
    }
}
Also used : ConnectorFactory(io.trino.spi.connector.ConnectorFactory) MBeanInfo(javax.management.MBeanInfo) TestingConnectorContext(io.trino.testing.TestingConnectorContext) Plugin(io.trino.spi.Plugin) ManagementFactory.getPlatformMBeanServer(java.lang.management.ManagementFactory.getPlatformMBeanServer) MBeanServer(javax.management.MBeanServer) ObjectName(javax.management.ObjectName) Test(org.testng.annotations.Test)

Example 18 with Plugin

use of io.trino.spi.Plugin in project trino by trinodb.

the class PluginManager method loadPlugin.

private void loadPlugin(PluginClassLoader pluginClassLoader) {
    ServiceLoader<Plugin> serviceLoader = ServiceLoader.load(Plugin.class, pluginClassLoader);
    List<Plugin> plugins = ImmutableList.copyOf(serviceLoader);
    checkState(!plugins.isEmpty(), "No service providers of type %s in the classpath: %s", Plugin.class.getName(), asList(pluginClassLoader.getURLs()));
    for (Plugin plugin : plugins) {
        log.info("Installing %s", plugin.getClass().getName());
        installPlugin(plugin, pluginClassLoader::duplicate);
    }
}
Also used : Plugin(io.trino.spi.Plugin)

Example 19 with Plugin

use of io.trino.spi.Plugin in project trino by trinodb.

the class TestDeltaLakePerTransactionMetastoreCache method createQueryRunner.

private DistributedQueryRunner createQueryRunner(boolean enablePerTransactionHiveMetastoreCaching) throws Exception {
    boolean createdDeltaLake = false;
    if (dockerizedMinioDataLake == null) {
        // share environment between testcases to speed things up
        dockerizedMinioDataLake = createDockerizedMinioDataLakeForDeltaLake(BUCKET_NAME);
        createdDeltaLake = true;
    }
    Session session = testSessionBuilder().setCatalog(DELTA_CATALOG).setSchema("default").build();
    DistributedQueryRunner queryRunner = DistributedQueryRunner.builder(session).build();
    queryRunner.installPlugin(new Plugin() {

        @Override
        public Iterable<ConnectorFactory> getConnectorFactories() {
            return ImmutableList.of(new ConnectorFactory() {

                @Override
                public String getName() {
                    return TEST_DELTA_CONNECTOR_NAME;
                }

                @Override
                public Connector create(String catalogName, Map<String, String> config, ConnectorContext context) {
                    return InternalDeltaLakeConnectorFactory.createConnector(catalogName, config, context, new AbstractConfigurationAwareModule() {

                        @Override
                        protected void setup(Binder binder) {
                            newOptionalBinder(binder, ThriftMetastoreClientFactory.class).setDefault().to(DefaultThriftMetastoreClientFactory.class).in(Scopes.SINGLETON);
                            binder.bind(MetastoreLocator.class).to(StaticMetastoreLocator.class).in(Scopes.SINGLETON);
                            configBinder(binder).bindConfig(StaticMetastoreConfig.class);
                            configBinder(binder).bindConfig(ThriftMetastoreConfig.class);
                            binder.bind(ThriftMetastore.class).to(ThriftHiveMetastore.class).in(Scopes.SINGLETON);
                            newExporter(binder).export(ThriftMetastore.class).as((generator) -> generator.generatedNameOf(ThriftHiveMetastore.class));
                            install(new ThriftMetastoreAuthenticationModule());
                            binder.bind(Boolean.class).annotatedWith(HideNonDeltaLakeTables.class).toInstance(false);
                            binder.bind(BridgingHiveMetastoreFactory.class).in(Scopes.SINGLETON);
                        }

                        @Provides
                        @Singleton
                        @RawHiveMetastoreFactory
                        public HiveMetastoreFactory getCountingHiveMetastoreFactory(BridgingHiveMetastoreFactory bridgingHiveMetastoreFactory) {
                            return new HiveMetastoreFactory() {

                                @Override
                                public boolean isImpersonationEnabled() {
                                    return false;
                                }

                                @Override
                                public HiveMetastore createMetastore(Optional<ConnectorIdentity> identity) {
                                    HiveMetastore bridgingHiveMetastore = bridgingHiveMetastoreFactory.createMetastore(identity);
                                    // bind HiveMetastore which counts method executions
                                    return Reflection.newProxy(HiveMetastore.class, (proxy, method, args) -> {
                                        String methodName = method.getName();
                                        long count = hiveMetastoreInvocationCounts.getOrDefault(methodName, 0L);
                                        hiveMetastoreInvocationCounts.put(methodName, count + 1);
                                        return method.invoke(bridgingHiveMetastore, args);
                                    });
                                }
                            };
                        }
                    });
                }
            });
        }
    });
    ImmutableMap.Builder<String, String> deltaLakeProperties = ImmutableMap.builder();
    deltaLakeProperties.put("hive.metastore.uri", dockerizedMinioDataLake.getTestingHadoop().getMetastoreAddress());
    deltaLakeProperties.put("hive.s3.aws-access-key", MINIO_ACCESS_KEY);
    deltaLakeProperties.put("hive.s3.aws-secret-key", MINIO_SECRET_KEY);
    deltaLakeProperties.put("hive.s3.endpoint", dockerizedMinioDataLake.getMinioAddress());
    deltaLakeProperties.put("hive.s3.path-style-access", "true");
    // use test value so we do not get clash with default bindings)
    deltaLakeProperties.put("hive.metastore", "test");
    if (!enablePerTransactionHiveMetastoreCaching) {
        // almost disable the cache; 0 is not allowed as config property value
        deltaLakeProperties.put("hive.per-transaction-metastore-cache-maximum-size", "1");
    }
    queryRunner.createCatalog(DELTA_CATALOG, TEST_DELTA_CONNECTOR_NAME, deltaLakeProperties.buildOrThrow());
    if (createdDeltaLake) {
        List<TpchTable<? extends TpchEntity>> tpchTables = List.of(TpchTable.NATION, TpchTable.REGION);
        tpchTables.forEach(table -> {
            String tableName = table.getTableName();
            dockerizedMinioDataLake.copyResources("io/trino/plugin/deltalake/testing/resources/databricks/" + tableName, tableName);
            queryRunner.execute(format("CREATE TABLE %s.%s.%s (dummy int) WITH (location = 's3://%s/%3$s')", DELTA_CATALOG, "default", tableName, BUCKET_NAME));
        });
    }
    return queryRunner;
}
Also used : BridgingHiveMetastoreFactory(io.trino.plugin.hive.metastore.thrift.BridgingHiveMetastoreFactory) DELTA_CATALOG(io.trino.plugin.deltalake.DeltaLakeQueryRunner.DELTA_CATALOG) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) MINIO_SECRET_KEY(io.trino.plugin.deltalake.util.MinioContainer.MINIO_SECRET_KEY) Test(org.testng.annotations.Test) ConnectorContext(io.trino.spi.connector.ConnectorContext) Singleton(javax.inject.Singleton) StaticMetastoreConfig(io.trino.plugin.hive.metastore.thrift.StaticMetastoreConfig) MINIO_ACCESS_KEY(io.trino.plugin.deltalake.util.MinioContainer.MINIO_ACCESS_KEY) ThriftMetastoreClientFactory(io.trino.plugin.hive.metastore.thrift.ThriftMetastoreClientFactory) HiveMetastoreFactory(io.trino.plugin.hive.metastore.HiveMetastoreFactory) AbstractConfigurationAwareModule(io.airlift.configuration.AbstractConfigurationAwareModule) HiveMetastore(io.trino.plugin.hive.metastore.HiveMetastore) DistributedQueryRunner(io.trino.testing.DistributedQueryRunner) ImmutableList(com.google.common.collect.ImmutableList) Binder(com.google.inject.Binder) DockerizedMinioDataLake(io.trino.plugin.deltalake.util.DockerizedMinioDataLake) Map(java.util.Map) ExportBinder.newExporter(org.weakref.jmx.guice.ExportBinder.newExporter) DefaultThriftMetastoreClientFactory(io.trino.plugin.hive.metastore.thrift.DefaultThriftMetastoreClientFactory) ConnectorFactory(io.trino.spi.connector.ConnectorFactory) OptionalBinder.newOptionalBinder(com.google.inject.multibindings.OptionalBinder.newOptionalBinder) TpchEntity(io.trino.tpch.TpchEntity) TpchTable(io.trino.tpch.TpchTable) StaticMetastoreLocator(io.trino.plugin.hive.metastore.thrift.StaticMetastoreLocator) AfterClass(org.testng.annotations.AfterClass) ConnectorIdentity(io.trino.spi.security.ConnectorIdentity) ImmutableMap(com.google.common.collect.ImmutableMap) ThriftHiveMetastore(io.trino.plugin.hive.metastore.thrift.ThriftHiveMetastore) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Reflection(com.google.common.reflect.Reflection) ThriftMetastoreAuthenticationModule(io.trino.plugin.hive.metastore.thrift.ThriftMetastoreAuthenticationModule) Scopes(com.google.inject.Scopes) RawHiveMetastoreFactory(io.trino.plugin.hive.metastore.RawHiveMetastoreFactory) String.format(java.lang.String.format) Plugin(io.trino.spi.Plugin) List(java.util.List) TestingSession.testSessionBuilder(io.trino.testing.TestingSession.testSessionBuilder) Provides(com.google.inject.Provides) DeltaLakeDockerizedMinioDataLake.createDockerizedMinioDataLakeForDeltaLake(io.trino.plugin.deltalake.DeltaLakeDockerizedMinioDataLake.createDockerizedMinioDataLakeForDeltaLake) MetastoreLocator(io.trino.plugin.hive.metastore.thrift.MetastoreLocator) ThriftMetastore(io.trino.plugin.hive.metastore.thrift.ThriftMetastore) ThriftMetastoreConfig(io.trino.plugin.hive.metastore.thrift.ThriftMetastoreConfig) Optional(java.util.Optional) ConfigBinder.configBinder(io.airlift.configuration.ConfigBinder.configBinder) Session(io.trino.Session) Connector(io.trino.spi.connector.Connector) DistributedQueryRunner(io.trino.testing.DistributedQueryRunner) RawHiveMetastoreFactory(io.trino.plugin.hive.metastore.RawHiveMetastoreFactory) StaticMetastoreLocator(io.trino.plugin.hive.metastore.thrift.StaticMetastoreLocator) MetastoreLocator(io.trino.plugin.hive.metastore.thrift.MetastoreLocator) TpchTable(io.trino.tpch.TpchTable) ThriftMetastoreConfig(io.trino.plugin.hive.metastore.thrift.ThriftMetastoreConfig) Binder(com.google.inject.Binder) OptionalBinder.newOptionalBinder(com.google.inject.multibindings.OptionalBinder.newOptionalBinder) ConfigBinder.configBinder(io.airlift.configuration.ConfigBinder.configBinder) ConnectorFactory(io.trino.spi.connector.ConnectorFactory) ConnectorContext(io.trino.spi.connector.ConnectorContext) AbstractConfigurationAwareModule(io.airlift.configuration.AbstractConfigurationAwareModule) ThriftMetastoreAuthenticationModule(io.trino.plugin.hive.metastore.thrift.ThriftMetastoreAuthenticationModule) BridgingHiveMetastoreFactory(io.trino.plugin.hive.metastore.thrift.BridgingHiveMetastoreFactory) HiveMetastoreFactory(io.trino.plugin.hive.metastore.HiveMetastoreFactory) RawHiveMetastoreFactory(io.trino.plugin.hive.metastore.RawHiveMetastoreFactory) HiveMetastore(io.trino.plugin.hive.metastore.HiveMetastore) ThriftHiveMetastore(io.trino.plugin.hive.metastore.thrift.ThriftHiveMetastore) ThriftMetastore(io.trino.plugin.hive.metastore.thrift.ThriftMetastore) ConnectorIdentity(io.trino.spi.security.ConnectorIdentity) Provides(com.google.inject.Provides) TpchEntity(io.trino.tpch.TpchEntity) ImmutableMap(com.google.common.collect.ImmutableMap) BridgingHiveMetastoreFactory(io.trino.plugin.hive.metastore.thrift.BridgingHiveMetastoreFactory) Singleton(javax.inject.Singleton) StaticMetastoreConfig(io.trino.plugin.hive.metastore.thrift.StaticMetastoreConfig) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Session(io.trino.Session) Plugin(io.trino.spi.Plugin)

Example 20 with Plugin

use of io.trino.spi.Plugin in project trino by trinodb.

the class TestDeltaLakePlugin method testCreateConnector.

@Test
public void testCreateConnector() {
    Plugin plugin = new TestingDeltaLakePlugin();
    ConnectorFactory factory = getOnlyElement(plugin.getConnectorFactories());
    factory.create("test", ImmutableMap.of("hive.metastore.uri", "thrift://foo:1234"), new TestingConnectorContext());
}
Also used : ConnectorFactory(io.trino.spi.connector.ConnectorFactory) TestingConnectorContext(io.trino.testing.TestingConnectorContext) Plugin(io.trino.spi.Plugin) Test(org.testng.annotations.Test)

Aggregations

Plugin (io.trino.spi.Plugin)34 ConnectorFactory (io.trino.spi.connector.ConnectorFactory)29 Test (org.testng.annotations.Test)28 TestingConnectorContext (io.trino.testing.TestingConnectorContext)22 ImmutableList (com.google.common.collect.ImmutableList)8 ImmutableMap (com.google.common.collect.ImmutableMap)8 DistributedQueryRunner (io.trino.testing.DistributedQueryRunner)8 Session (io.trino.Session)7 TestingSession.testSessionBuilder (io.trino.testing.TestingSession.testSessionBuilder)7 MockConnectorFactory (io.trino.connector.MockConnectorFactory)6 List (java.util.List)6 Optional (java.util.Optional)6 SchemaTableName (io.trino.spi.connector.SchemaTableName)5 AbstractTestQueryFramework (io.trino.testing.AbstractTestQueryFramework)5 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)5 TpchPlugin (io.trino.plugin.tpch.TpchPlugin)4 QueryRunner (io.trino.testing.QueryRunner)4 ColumnMetadata (io.trino.spi.connector.ColumnMetadata)3 Connector (io.trino.spi.connector.Connector)3 BIGINT (io.trino.spi.type.BigintType.BIGINT)3