diff --git a/plugin/trino-raptor-legacy/pom.xml b/plugin/trino-raptor-legacy/pom.xml index 5a34128e1799..655b77ad07ee 100644 --- a/plugin/trino-raptor-legacy/pom.xml +++ b/plugin/trino-raptor-legacy/pom.xml @@ -63,16 +63,6 @@ configuration - - io.airlift - dbpool - - - - io.airlift - discovery - - io.airlift http-client diff --git a/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/DatabaseMetadataModule.java b/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/DatabaseMetadataModule.java index 49f6c1d18f7d..ebb8d74ecb93 100644 --- a/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/DatabaseMetadataModule.java +++ b/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/DatabaseMetadataModule.java @@ -13,37 +13,20 @@ */ package io.trino.plugin.raptor.legacy.metadata; -import com.google.common.reflect.TypeParameter; -import com.google.common.reflect.TypeToken; import com.google.inject.Binder; -import com.google.inject.Injector; -import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.Provides; -import com.google.inject.Scopes; -import com.google.inject.TypeLiteral; import io.airlift.configuration.AbstractConfigurationAwareModule; -import io.airlift.dbpool.H2EmbeddedDataSourceModule; -import io.airlift.dbpool.MySqlDataSource; -import io.airlift.dbpool.MySqlDataSourceConfig; -import io.airlift.discovery.client.ServiceDescriptor; -import io.airlift.discovery.client.testing.StaticServiceSelector; import io.trino.plugin.raptor.legacy.util.DaoSupplier; import org.jdbi.v3.core.ConnectionFactory; import org.jdbi.v3.core.Jdbi; -import javax.inject.Inject; -import javax.inject.Provider; import javax.inject.Singleton; -import javax.sql.DataSource; -import java.lang.reflect.Type; +import java.sql.DriverManager; -import static com.google.common.base.Preconditions.checkState; import static io.airlift.configuration.ConditionalModule.conditionalModule; import static io.airlift.configuration.ConfigBinder.configBinder; -import static io.airlift.discovery.client.ServiceDescriptor.serviceDescriptor; -import static java.util.Objects.requireNonNull; public class DatabaseMetadataModule extends AbstractConfigurationAwareModule @@ -54,93 +37,63 @@ protected void setup(Binder ignored) install(conditionalModule( DatabaseConfig.class, config -> "mysql".equals(config.getDatabaseType()), - binder -> { - binder.install(new MySqlDataSourceModule()); - bindDaoSupplier(binder, ShardDao.class, MySqlShardDao.class); - })); + new MySqlModule())); install(conditionalModule( DatabaseConfig.class, config -> "h2".equals(config.getDatabaseType()), - binder -> { - binder.install(new H2EmbeddedDataSourceModule("metadata", ForMetadata.class)); - bindDaoSupplier(binder, ShardDao.class, H2ShardDao.class); - })); + new H2Module())); } - @ForMetadata - @Singleton - @Provides - public ConnectionFactory createConnectionFactory(@ForMetadata DataSource dataSource) - { - return dataSource::getConnection; - } - - public static void bindDaoSupplier(Binder binder, Class baseType, Class type) - { - binder.bind(daoSupplierTypeToken(baseType)) - .toProvider(new DaoSupplierProvider<>(type)) - .in(Scopes.SINGLETON); - } - - @SuppressWarnings("unchecked") - private static TypeLiteral> daoSupplierTypeToken(Class type) - { - Type javaType = new TypeToken>() {} - .where(new TypeParameter<>() {}, TypeToken.of(type)) - .getType(); - return (TypeLiteral>) TypeLiteral.get(javaType); - } - - private static class DaoSupplierProvider - implements Provider> + private static class MySqlModule + implements Module { - private final Class type; - private Injector injector; - - public DaoSupplierProvider(Class type) + @Override + public void configure(Binder binder) { - this.type = requireNonNull(type, "type is null"); + configBinder(binder).bindConfig(JdbcDatabaseConfig.class); } - @Inject - public void setInjector(Injector injector) + @Provides + @Singleton + @ForMetadata + public static ConnectionFactory createConnectionFactory(JdbcDatabaseConfig config) { - this.injector = injector; + String url = config.getUrl(); + return () -> DriverManager.getConnection(url); } - @Override - public DaoSupplier get() + @Provides + @Singleton + public static DaoSupplier createShardDaoSupplier(@ForMetadata Jdbi dbi) { - checkState(injector != null, "injector was not set"); - Jdbi dbi = injector.getInstance(Key.get(Jdbi.class, ForMetadata.class)); - return new DaoSupplier<>(dbi, type); + return new DaoSupplier<>(dbi, MySqlShardDao.class); } } - private static class MySqlDataSourceModule + private static class H2Module implements Module { @Override public void configure(Binder binder) { - configBinder(binder).bindConfig(JdbcDatabaseConfig.class); - configBinder(binder).bindConfig(MySqlDataSourceConfig.class, ForMetadata.class, "metadata"); - configBinder(binder).bindConfigDefaults(MySqlDataSourceConfig.class, ForMetadata.class, config -> { - config.setMaxConnections(100); - config.setDefaultFetchSize(1000); - }); + configBinder(binder).bindConfig(H2DatabaseConfig.class); } - @ForMetadata + @Provides @Singleton + @ForMetadata + public static ConnectionFactory createConnectionFactory(H2DatabaseConfig config) + { + String url = "jdbc:h2:" + config.getFilename(); + return () -> DriverManager.getConnection(url); + } + @Provides - DataSource createDataSource(JdbcDatabaseConfig config, @ForMetadata MySqlDataSourceConfig mysqlConfig) + @Singleton + public static DaoSupplier createShardDaoSupplier(@ForMetadata Jdbi dbi) { - ServiceDescriptor descriptor = serviceDescriptor("mysql") - .addProperty("jdbc", config.getUrl()) - .build(); - return new MySqlDataSource(new StaticServiceSelector(descriptor), mysqlConfig); + return new DaoSupplier<>(dbi, H2ShardDao.class); } } } diff --git a/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/H2DatabaseConfig.java b/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/H2DatabaseConfig.java new file mode 100644 index 000000000000..a99fc3b88505 --- /dev/null +++ b/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/H2DatabaseConfig.java @@ -0,0 +1,36 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.trino.plugin.raptor.legacy.metadata; + +import io.airlift.configuration.Config; + +import javax.validation.constraints.NotNull; + +public class H2DatabaseConfig +{ + private String filename; + + @NotNull + public String getFilename() + { + return filename; + } + + @Config("metadata.db.filename") + public H2DatabaseConfig setFilename(String filename) + { + this.filename = filename; + return this; + } +} diff --git a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorBenchmarkQueryRunner.java b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorBenchmarkQueryRunner.java deleted file mode 100644 index 4d61164179b6..000000000000 --- a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorBenchmarkQueryRunner.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.trino.plugin.raptor.legacy; - -import com.google.common.collect.ImmutableMap; -import io.trino.Session; -import io.trino.benchmark.BenchmarkSuite; -import io.trino.plugin.tpch.TpchConnectorFactory; -import io.trino.spi.connector.ConnectorFactory; -import io.trino.testing.LocalQueryRunner; - -import java.io.File; -import java.io.IOException; -import java.util.Map; - -import static com.google.common.collect.Iterables.getOnlyElement; -import static io.trino.testing.TestingSession.testSessionBuilder; -import static java.util.Objects.requireNonNull; - -public final class RaptorBenchmarkQueryRunner -{ - private static final String TPCH_CACHE_DIR = System.getProperty("tpchCacheDir", "/tmp/presto_tpch/data_cache"); - - private RaptorBenchmarkQueryRunner() - { - } - - public static void main(String[] args) - throws IOException - { - String outputDirectory = requireNonNull(System.getProperty("outputDirectory"), "Must specify -DoutputDirectory=..."); - try (LocalQueryRunner localQueryRunner = createLocalQueryRunner()) { - new BenchmarkSuite(localQueryRunner, outputDirectory).runAllBenchmarks(); - } - } - - public static LocalQueryRunner createLocalQueryRunner() - { - Session session = testSessionBuilder() - .setCatalog("raptor") - .setSchema("benchmark") - .build(); - LocalQueryRunner localQueryRunner = LocalQueryRunner.create(session); - - // add tpch - localQueryRunner.createCatalog("tpch", new TpchConnectorFactory(1), ImmutableMap.of()); - - // add raptor - ConnectorFactory raptorConnectorFactory = getOnlyElement(new RaptorPlugin() - .getConnectorFactories()); - Map config = createRaptorConfig(TPCH_CACHE_DIR); - localQueryRunner.createCatalog("raptor", raptorConnectorFactory, config); - - if (!localQueryRunner.tableExists(session, "orders")) { - localQueryRunner.execute("CREATE TABLE orders AS SELECT * FROM tpch.sf1.orders"); - } - if (!localQueryRunner.tableExists(session, "lineitem")) { - localQueryRunner.execute("CREATE TABLE lineitem AS SELECT * FROM tpch.sf1.lineitem"); - } - return localQueryRunner; - } - - private static Map createRaptorConfig(String cacheDir) - { - File dataDir = new File(cacheDir); - File databaseDir = new File(dataDir, "db"); - - return ImmutableMap.builder() - .put("metadata.db.type", "h2") - .put("metadata.db.filename", databaseDir.getAbsolutePath()) - .put("storage.data-directory", dataDir.getAbsolutePath()) - .put("storage.compress", "false") - .buildOrThrow(); - } -} diff --git a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorQueryRunner.java b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorQueryRunner.java index ffbcb406850d..a972a8437d1c 100644 --- a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorQueryRunner.java +++ b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorQueryRunner.java @@ -63,7 +63,6 @@ public static DistributedQueryRunner createRaptorQueryRunner( Map raptorProperties = ImmutableMap.builder() .putAll(extraRaptorProperties) .put("metadata.db.type", "h2") - .put("metadata.db.connections.max", "100") .put("metadata.db.filename", new File(baseDir, "db").getAbsolutePath()) .put("storage.data-directory", new File(baseDir, "data").getAbsolutePath()) .put("storage.max-shard-rows", "2000") diff --git a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestJdbcDatabaseConfig.java b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestH2DatabaseConfig.java similarity index 79% rename from plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestJdbcDatabaseConfig.java rename to plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestH2DatabaseConfig.java index b2d422cf7d1f..4ba21cdfa209 100644 --- a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestJdbcDatabaseConfig.java +++ b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestH2DatabaseConfig.java @@ -22,24 +22,24 @@ import static io.airlift.configuration.testing.ConfigAssertions.assertRecordedDefaults; import static io.airlift.configuration.testing.ConfigAssertions.recordDefaults; -public class TestJdbcDatabaseConfig +public class TestH2DatabaseConfig { @Test public void testDefaults() { - assertRecordedDefaults(recordDefaults(JdbcDatabaseConfig.class) - .setUrl(null)); + assertRecordedDefaults(recordDefaults(H2DatabaseConfig.class) + .setFilename(null)); } @Test public void testExplicitPropertyMappings() { Map properties = ImmutableMap.builder() - .put("metadata.db.url", "jdbc:test://example.net/test") + .put("metadata.db.filename", "/tmp/db") .buildOrThrow(); - JdbcDatabaseConfig expected = new JdbcDatabaseConfig() - .setUrl("jdbc:test://example.net/test"); + H2DatabaseConfig expected = new H2DatabaseConfig() + .setFilename("/tmp/db"); assertFullMapping(properties, expected); }