diff --git a/core/trino-main/src/main/java/io/trino/testing/TestingConnectorContext.java b/core/trino-main/src/main/java/io/trino/testing/TestingConnectorContext.java index 8f0684717038..cba6defea7f4 100644 --- a/core/trino-main/src/main/java/io/trino/testing/TestingConnectorContext.java +++ b/core/trino-main/src/main/java/io/trino/testing/TestingConnectorContext.java @@ -33,15 +33,26 @@ import static io.trino.spi.connector.MetadataProvider.NOOP_METADATA_PROVIDER; import static io.trino.type.InternalTypeManager.TESTING_TYPE_MANAGER; +import static java.util.Objects.requireNonNull; public final class TestingConnectorContext implements ConnectorContext { - private final NodeManager nodeManager = TestingNodeManager.create(); + private final NodeManager nodeManager; private final VersionEmbedder versionEmbedder = new EmbedVersion(NodeVersion.UNKNOWN); private final PageSorter pageSorter = new PagesIndexPageSorter(new PagesIndex.TestingFactory(false)); private final PageIndexerFactory pageIndexerFactory = new GroupByHashPageIndexerFactory(new FlatHashStrategyCompiler(new TypeOperators())); + public TestingConnectorContext() + { + this(TestingNodeManager.create()); + } + + public TestingConnectorContext(NodeManager nodeManager) + { + this.nodeManager = requireNonNull(nodeManager, "nodeManager is null"); + } + @Override public OpenTelemetry getOpenTelemetry() { diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/NodeVersion.java b/core/trino-spi/src/main/java/io/trino/spi/NodeVersion.java similarity index 96% rename from plugin/trino-hive/src/main/java/io/trino/plugin/hive/NodeVersion.java rename to core/trino-spi/src/main/java/io/trino/spi/NodeVersion.java index f8484ce72995..daf0b5f5acf9 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/NodeVersion.java +++ b/core/trino-spi/src/main/java/io/trino/spi/NodeVersion.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.trino.plugin.hive; +package io.trino.spi; import static java.util.Objects.requireNonNull; diff --git a/lib/trino-filesystem-manager/src/main/java/io/trino/filesystem/manager/FileSystemModule.java b/lib/trino-filesystem-manager/src/main/java/io/trino/filesystem/manager/FileSystemModule.java index 9d26955feb0f..411076795704 100644 --- a/lib/trino-filesystem-manager/src/main/java/io/trino/filesystem/manager/FileSystemModule.java +++ b/lib/trino-filesystem-manager/src/main/java/io/trino/filesystem/manager/FileSystemModule.java @@ -20,7 +20,6 @@ import com.google.inject.Singleton; import io.airlift.configuration.AbstractConfigurationAwareModule; import io.airlift.configuration.ConfigPropertyMetadata; -import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; import io.trino.filesystem.Location; import io.trino.filesystem.TrinoFileSystemFactory; @@ -46,6 +45,7 @@ import io.trino.filesystem.switching.SwitchingFileSystemFactory; import io.trino.filesystem.tracing.TracingFileSystemFactory; import io.trino.filesystem.tracking.TrackingFileSystemFactory; +import io.trino.spi.connector.ConnectorContext; import java.util.Map; import java.util.Optional; @@ -60,15 +60,15 @@ public class FileSystemModule extends AbstractConfigurationAwareModule { private final String catalogName; + private final ConnectorContext context; private final boolean isCoordinator; - private final OpenTelemetry openTelemetry; private final boolean coordinatorFileCaching; - public FileSystemModule(String catalogName, boolean isCoordinator, OpenTelemetry openTelemetry, boolean coordinatorFileCaching) + public FileSystemModule(String catalogName, ConnectorContext context, boolean coordinatorFileCaching) { this.catalogName = requireNonNull(catalogName, "catalogName is null"); - this.isCoordinator = isCoordinator; - this.openTelemetry = requireNonNull(openTelemetry, "openTelemetry is null"); + this.context = requireNonNull(context, "context is null"); + this.isCoordinator = context.getCurrentNode().isCoordinator(); this.coordinatorFileCaching = coordinatorFileCaching; } @@ -86,7 +86,7 @@ protected void setup(Binder binder) !config.isNativeGcsEnabled(), !config.isNativeS3Enabled(), catalogName, - openTelemetry); + context); loader.configure().forEach((name, securitySensitive) -> consumeProperty(new ConfigPropertyMetadata(name, securitySensitive))); diff --git a/lib/trino-filesystem-manager/src/main/java/io/trino/filesystem/manager/HdfsFileSystemLoader.java b/lib/trino-filesystem-manager/src/main/java/io/trino/filesystem/manager/HdfsFileSystemLoader.java index 038a9f69e6df..19b1c470eced 100644 --- a/lib/trino-filesystem-manager/src/main/java/io/trino/filesystem/manager/HdfsFileSystemLoader.java +++ b/lib/trino-filesystem-manager/src/main/java/io/trino/filesystem/manager/HdfsFileSystemLoader.java @@ -13,10 +13,10 @@ */ package io.trino.filesystem.manager; -import io.opentelemetry.api.OpenTelemetry; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.spi.Plugin; import io.trino.spi.classloader.ThreadContextClassLoader; +import io.trino.spi.connector.ConnectorContext; import jakarta.annotation.PreDestroy; import java.io.File; @@ -45,7 +45,7 @@ public HdfsFileSystemLoader( boolean gcsEnabled, boolean s3Enabled, String catalogName, - OpenTelemetry openTelemetry) + ConnectorContext context) { Class clazz = tryLoadExistingHdfsManager(); @@ -73,8 +73,8 @@ public HdfsFileSystemLoader( } try (var _ = new ThreadContextClassLoader(classLoader)) { - manager = clazz.getConstructor(Map.class, boolean.class, boolean.class, boolean.class, String.class, OpenTelemetry.class) - .newInstance(config, azureEnabled, gcsEnabled, s3Enabled, catalogName, openTelemetry); + manager = clazz.getConstructor(Map.class, boolean.class, boolean.class, boolean.class, String.class, ConnectorContext.class) + .newInstance(config, azureEnabled, gcsEnabled, s3Enabled, catalogName, context); } catch (ReflectiveOperationException e) { throw new RuntimeException(e); diff --git a/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HdfsFileSystemManager.java b/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HdfsFileSystemManager.java index 4f01dd09c248..44fff919c843 100644 --- a/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HdfsFileSystemManager.java +++ b/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HdfsFileSystemManager.java @@ -18,7 +18,6 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.bootstrap.LifeCycleManager; import io.airlift.configuration.ConfigPropertyMetadata; -import io.opentelemetry.api.OpenTelemetry; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.hdfs.HdfsModule; import io.trino.hdfs.authentication.HdfsAuthenticationModule; @@ -26,9 +25,10 @@ import io.trino.hdfs.cos.HiveCosModule; import io.trino.hdfs.gcs.HiveGcsModule; import io.trino.hdfs.s3.HiveS3Module; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; import io.trino.plugin.base.jmx.MBeanServerModule; -import io.trino.spi.catalog.CatalogName; +import io.trino.spi.connector.ConnectorContext; import org.weakref.jmx.guice.MBeanModule; import java.util.ArrayList; @@ -49,7 +49,7 @@ public HdfsFileSystemManager( boolean gcsEnabled, boolean s3Enabled, String catalogName, - OpenTelemetry openTelemetry) + ConnectorContext context) { List modules = new ArrayList<>(); @@ -61,10 +61,7 @@ public HdfsFileSystemManager( modules.add(new HdfsModule()); modules.add(new HdfsAuthenticationModule()); modules.add(new HiveCosModule()); - modules.add(binder -> { - binder.bind(OpenTelemetry.class).toInstance(openTelemetry); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }); + modules.add(new ConnectorContextModule(catalogName, context)); if (azureEnabled) { modules.add(new HiveAzureModule()); diff --git a/lib/trino-hdfs/src/test/java/io/trino/filesystem/hdfs/TestHdfsFileSystemManager.java b/lib/trino-hdfs/src/test/java/io/trino/filesystem/hdfs/TestHdfsFileSystemManager.java index 82567751f9f0..9e6637cd9a51 100644 --- a/lib/trino-hdfs/src/test/java/io/trino/filesystem/hdfs/TestHdfsFileSystemManager.java +++ b/lib/trino-hdfs/src/test/java/io/trino/filesystem/hdfs/TestHdfsFileSystemManager.java @@ -14,11 +14,11 @@ package io.trino.filesystem.hdfs; import com.google.common.collect.ImmutableMap; -import io.opentelemetry.api.OpenTelemetry; import io.trino.filesystem.Location; import io.trino.filesystem.TrinoFileSystem; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.spi.security.ConnectorIdentity; +import io.trino.testing.TestingConnectorContext; import org.junit.jupiter.api.Test; import java.io.IOException; @@ -42,7 +42,7 @@ void testManager() true, true, "test", - OpenTelemetry.noop()); + new TestingConnectorContext()); assertThat(manager.configure().keySet()).containsExactly("hive.dfs.verify-checksum", "hive.s3.region"); diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/CatalogNameModule.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/CatalogNameModule.java deleted file mode 100644 index 1f055819a2e3..000000000000 --- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/CatalogNameModule.java +++ /dev/null @@ -1,37 +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.base; - -import com.google.inject.Binder; -import com.google.inject.Module; -import io.trino.spi.catalog.CatalogName; - -import static java.util.Objects.requireNonNull; - -public class CatalogNameModule - implements Module -{ - private final String catalogName; - - public CatalogNameModule(String catalogName) - { - this.catalogName = requireNonNull(catalogName, "catalogName is null"); - } - - @Override - public void configure(Binder binder) - { - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - } -} diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ConnectorContextModule.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ConnectorContextModule.java new file mode 100644 index 000000000000..ee61a5d51e40 --- /dev/null +++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ConnectorContextModule.java @@ -0,0 +1,61 @@ +/* + * 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.base; + +import com.google.inject.Binder; +import com.google.inject.Module; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Tracer; +import io.trino.spi.Node; +import io.trino.spi.NodeManager; +import io.trino.spi.NodeVersion; +import io.trino.spi.PageIndexerFactory; +import io.trino.spi.PageSorter; +import io.trino.spi.VersionEmbedder; +import io.trino.spi.catalog.CatalogName; +import io.trino.spi.connector.ConnectorContext; +import io.trino.spi.connector.MetadataProvider; +import io.trino.spi.type.TypeManager; + +import static java.util.Objects.requireNonNull; + +public class ConnectorContextModule + implements Module +{ + private final String catalogName; + private final ConnectorContext context; + + public ConnectorContextModule(String catalogName, ConnectorContext context) + { + this.catalogName = requireNonNull(catalogName, "catalogName is null"); + this.context = requireNonNull(context, "context is null"); + } + + @Override + public void configure(Binder binder) + { + binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); + + binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); + binder.bind(Tracer.class).toInstance(context.getTracer()); + binder.bind(Node.class).toInstance(context.getCurrentNode()); + binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.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(MetadataProvider.class).toInstance(context.getMetadataProvider()); + binder.bind(PageSorter.class).toInstance(context.getPageSorter()); + binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory()); + } +} diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/TypeDeserializerModule.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/TypeDeserializerModule.java index ab030d667c09..93e67b036a6d 100644 --- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/TypeDeserializerModule.java +++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/TypeDeserializerModule.java @@ -16,25 +16,15 @@ import com.google.inject.Binder; import com.google.inject.Module; import io.trino.spi.type.Type; -import io.trino.spi.type.TypeManager; import static io.airlift.json.JsonBinder.jsonBinder; -import static java.util.Objects.requireNonNull; public class TypeDeserializerModule implements Module { - private final TypeManager typeManager; - - public TypeDeserializerModule(TypeManager typeManager) - { - this.typeManager = requireNonNull(typeManager, "typeManager is null"); - } - @Override public void configure(Binder binder) { - binder.bind(TypeManager.class).toInstance(typeManager); jsonBinder(binder).addDeserializerBinding(Type.class).to(TypeDeserializer.class); } } diff --git a/lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/security/BaseFileBasedConnectorAccessControlTest.java b/lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/security/BaseFileBasedConnectorAccessControlTest.java index 3cd43c58d64e..44f8b69042cb 100644 --- a/lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/security/BaseFileBasedConnectorAccessControlTest.java +++ b/lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/security/BaseFileBasedConnectorAccessControlTest.java @@ -18,8 +18,8 @@ import com.google.common.collect.ImmutableSet; import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; -import io.trino.plugin.base.CatalogNameModule; import io.trino.spi.QueryId; +import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.ConnectorAccessControl; import io.trino.spi.connector.ConnectorSecurityContext; import io.trino.spi.connector.ConnectorTransactionHandle; @@ -855,7 +855,7 @@ public void testRefreshing(@TempDir Path tempDir) protected ConnectorAccessControl createAccessControl(Map configProperties) { - Bootstrap bootstrap = new Bootstrap(new CatalogNameModule("test_catalog"), new FileBasedAccessControlModule()); + Bootstrap bootstrap = new Bootstrap(binder -> binder.bind(CatalogName.class).toInstance(new CatalogName("test_catalog")), new FileBasedAccessControlModule()); Injector injector = bootstrap .doNotInitializeLogging() diff --git a/plugin/trino-ai-functions/src/main/java/io/trino/plugin/ai/functions/AiConnectorFactory.java b/plugin/trino-ai-functions/src/main/java/io/trino/plugin/ai/functions/AiConnectorFactory.java index 83d5842eb001..189e410c831c 100644 --- a/plugin/trino-ai-functions/src/main/java/io/trino/plugin/ai/functions/AiConnectorFactory.java +++ b/plugin/trino-ai-functions/src/main/java/io/trino/plugin/ai/functions/AiConnectorFactory.java @@ -15,8 +15,7 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; -import io.opentelemetry.api.trace.Tracer; -import io.trino.spi.catalog.CatalogName; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; @@ -42,10 +41,7 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, new AiModule(), - binder -> { - binder.bind(Tracer.class).toInstance(context.getTracer()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }); + new ConnectorContextModule(catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnectorFactory.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnectorFactory.java index c1ecfdba8697..9d0ead6d4831 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnectorFactory.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnectorFactory.java @@ -16,14 +16,10 @@ import com.google.inject.Injector; import com.google.inject.Module; import io.airlift.bootstrap.Bootstrap; -import io.opentelemetry.api.OpenTelemetry; -import io.trino.spi.Node; -import io.trino.spi.VersionEmbedder; -import io.trino.spi.catalog.CatalogName; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import io.trino.spi.type.TypeManager; import java.util.Map; import java.util.function.Supplier; @@ -60,11 +56,7 @@ public Connector create(String catalogName, Map requiredConfig, Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - binder -> binder.bind(TypeManager.class).toInstance(context.getTypeManager()), - binder -> binder.bind(Node.class).toInstance(context.getCurrentNode()), - binder -> binder.bind(VersionEmbedder.class).toInstance(context.getVersionEmbedder()), - binder -> binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()), - binder -> binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)), + new ConnectorContextModule(catalogName, context), new JdbcModule(), module.get()); diff --git a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorFactory.java b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorFactory.java index 19d217723e15..263edf6d6d6d 100644 --- a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorFactory.java +++ b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorFactory.java @@ -16,17 +16,12 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.trace.Tracer; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; import io.trino.plugin.base.jmx.MBeanServerModule; -import io.trino.spi.Node; -import io.trino.spi.NodeManager; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import io.trino.spi.type.TypeManager; import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -57,14 +52,7 @@ public Connector create(String catalogName, Map config, Connecto new MBeanServerModule(), new MBeanModule(), new ConnectorObjectNameGeneratorModule("io.trino.plugin.bigquery", "trino.plugin.bigquery"), - binder -> { - binder.bind(TypeManager.class).toInstance(context.getTypeManager()); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(NodeManager.class).toInstance(context.getNodeManager()); - binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); - binder.bind(Tracer.class).toInstance(context.getTracer()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }); + new ConnectorContextModule(catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnectorFactory.java b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnectorFactory.java index 84c674de70da..afc06352ceb4 100644 --- a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnectorFactory.java +++ b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnectorFactory.java @@ -16,7 +16,7 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; @@ -45,7 +45,7 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - binder -> binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()), + new ConnectorContextModule(catalogName, context), new MBeanModule(), new JsonModule(), new CassandraClientModule(context.getTypeManager()), diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnectorFactory.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnectorFactory.java index 93d319a2cfe7..6bf4ce9ea422 100644 --- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnectorFactory.java +++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnectorFactory.java @@ -20,10 +20,8 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.bootstrap.LifeCycleManager; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.trace.Tracer; import io.trino.filesystem.manager.FileSystemModule; -import io.trino.plugin.base.CatalogNameModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorAccessControl; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSinkProvider; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider; @@ -34,11 +32,6 @@ import io.trino.plugin.base.session.SessionPropertiesProvider; import io.trino.plugin.deltalake.metastore.DeltaLakeMetastoreModule; import io.trino.plugin.hive.HiveConfig; -import io.trino.plugin.hive.NodeVersion; -import io.trino.spi.Node; -import io.trino.spi.NodeManager; -import io.trino.spi.PageIndexerFactory; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.classloader.ThreadContextClassLoader; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorAccessControl; @@ -52,7 +45,6 @@ import io.trino.spi.function.FunctionProvider; import io.trino.spi.function.table.ConnectorTableFunction; import io.trino.spi.procedure.Procedure; -import io.trino.spi.type.TypeManager; import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -96,22 +88,12 @@ public static Connector createConnector( new ConnectorObjectNameGeneratorModule("io.trino.plugin.deltalake", "trino.plugin.deltalake"), new JsonModule(), new MBeanServerModule(), - new CatalogNameModule(catalogName), metastoreModule.orElse(new DeltaLakeMetastoreModule()), new DeltaLakeModule(), new DeltaLakeSecurityModule(), new DeltaLakeSynchronizerModule(), - new FileSystemModule(catalogName, context.getCurrentNode().isCoordinator(), context.getOpenTelemetry(), false), - binder -> { - binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); - binder.bind(Tracer.class).toInstance(context.getTracer()); - binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getCurrentNode().getVersion())); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(NodeManager.class).toInstance(context.getNodeManager()); - binder.bind(TypeManager.class).toInstance(context.getTypeManager()); - binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }, + new FileSystemModule(catalogName, context, false), + new ConnectorContextModule(catalogName, context), module); Injector injector = app diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeMetadataFactory.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeMetadataFactory.java index b6e731e3552b..240be319a10d 100644 --- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeMetadataFactory.java +++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeMetadataFactory.java @@ -26,10 +26,10 @@ import io.trino.plugin.deltalake.transactionlog.checkpoint.CheckpointWriterManager; import io.trino.plugin.deltalake.transactionlog.reader.TransactionLogReaderFactory; import io.trino.plugin.deltalake.transactionlog.writer.TransactionLogWriterFactory; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.TrinoViewHiveMetastore; import io.trino.plugin.hive.security.UsingSystemSecurity; import io.trino.spi.Node; +import io.trino.spi.NodeVersion; import io.trino.spi.security.ConnectorIdentity; import io.trino.spi.type.TypeManager; diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakePageSinkProvider.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakePageSinkProvider.java index 36af036c33b7..0634eb5f745e 100644 --- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakePageSinkProvider.java +++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakePageSinkProvider.java @@ -23,8 +23,8 @@ import io.trino.plugin.deltalake.procedure.DeltaTableOptimizeHandle; import io.trino.plugin.deltalake.transactionlog.MetadataEntry; import io.trino.plugin.deltalake.transactionlog.ProtocolEntry; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.parquet.ParquetReaderConfig; +import io.trino.spi.NodeVersion; import io.trino.spi.PageIndexerFactory; import io.trino.spi.connector.ConnectorInsertTableHandle; import io.trino.spi.connector.ConnectorMergeSink; diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/transactionlog/checkpoint/CheckpointWriterManager.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/transactionlog/checkpoint/CheckpointWriterManager.java index aa25ab7fe384..8278148323e2 100644 --- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/transactionlog/checkpoint/CheckpointWriterManager.java +++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/transactionlog/checkpoint/CheckpointWriterManager.java @@ -29,7 +29,7 @@ import io.trino.plugin.deltalake.transactionlog.TableSnapshot; import io.trino.plugin.deltalake.transactionlog.TableSnapshot.MetadataAndProtocolEntry; import io.trino.plugin.deltalake.transactionlog.TransactionLogAccess; -import io.trino.plugin.hive.NodeVersion; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.connector.SchemaTableName; diff --git a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeMetadata.java b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeMetadata.java index 99236e23d545..655faa079291 100644 --- a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeMetadata.java +++ b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeMetadata.java @@ -22,7 +22,6 @@ import com.google.inject.Scopes; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; -import io.opentelemetry.api.trace.Tracer; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.filesystem.cache.CachingHostAddressProvider; import io.trino.filesystem.cache.DefaultCachingHostAddressProvider; @@ -32,21 +31,16 @@ import io.trino.metastore.Database; import io.trino.metastore.HiveMetastoreFactory; import io.trino.metastore.RawHiveMetastoreFactory; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.deltalake.metastore.DeltaLakeMetastore; import io.trino.plugin.deltalake.metastore.DeltaLakeMetastoreModule; import io.trino.plugin.deltalake.metastore.HiveMetastoreBackedDeltaLakeMetastore; import io.trino.plugin.deltalake.transactionlog.MetadataEntry; import io.trino.plugin.deltalake.transactionlog.ProtocolEntry; -import io.trino.plugin.hive.NodeVersion; -import io.trino.spi.Node; -import io.trino.spi.NodeManager; -import io.trino.spi.PageIndexerFactory; import io.trino.spi.TrinoException; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.Assignment; import io.trino.spi.connector.ColumnHandle; import io.trino.spi.connector.ColumnMetadata; -import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorTableHandle; import io.trino.spi.connector.ConnectorTableLayout; import io.trino.spi.connector.ConnectorTableMetadata; @@ -63,7 +57,6 @@ import io.trino.spi.type.DoubleType; import io.trino.spi.type.RowType; import io.trino.spi.type.Type; -import io.trino.spi.type.TypeManager; import io.trino.spi.type.VarcharType; import io.trino.testing.TestingConnectorContext; import io.trino.tests.BogusType; @@ -189,19 +182,11 @@ public void setUp() .put("hive.metastore.catalog.dir", temporaryCatalogDirectory.getPath()) .buildOrThrow(); + TestingConnectorContext context = new TestingConnectorContext(); Bootstrap app = new Bootstrap( // connector dependencies new JsonModule(), - binder -> { - ConnectorContext context = new TestingConnectorContext(); - binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getCurrentNode().getVersion())); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(CatalogName.class).toInstance(new CatalogName("test")); - binder.bind(TypeManager.class).toInstance(context.getTypeManager()); - binder.bind(NodeManager.class).toInstance(context.getNodeManager()); - binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory()); - binder.bind(Tracer.class).toInstance(context.getTracer()); - }, + new ConnectorContextModule("test", context), // connector modules new DeltaLakeSecurityModule(), new DeltaLakeMetastoreModule(), diff --git a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakePageSink.java b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakePageSink.java index f699f51bc289..fe8d16403680 100644 --- a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakePageSink.java +++ b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakePageSink.java @@ -26,8 +26,8 @@ import io.trino.plugin.deltalake.metastore.NoOpVendedCredentialsProvider; import io.trino.plugin.deltalake.transactionlog.ProtocolEntry; import io.trino.plugin.hive.HiveTransactionHandle; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.parquet.ParquetReaderConfig; +import io.trino.spi.NodeVersion; import io.trino.spi.Page; import io.trino.spi.PageBuilder; import io.trino.spi.block.BlockBuilder; diff --git a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeSplitManager.java b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeSplitManager.java index 8f138b960b5d..010c7e7f63e1 100644 --- a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeSplitManager.java +++ b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeSplitManager.java @@ -44,9 +44,9 @@ import io.trino.plugin.deltalake.transactionlog.writer.NoIsolationSynchronizer; import io.trino.plugin.deltalake.transactionlog.writer.TransactionLogSynchronizerManager; import io.trino.plugin.hive.HiveTransactionHandle; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.parquet.ParquetReaderConfig; import io.trino.plugin.hive.parquet.ParquetWriterConfig; +import io.trino.spi.NodeVersion; import io.trino.spi.SplitWeight; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.connector.ConnectorSplit; diff --git a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/metastore/glue/TestDeltaLakeGlueMetastore.java b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/metastore/glue/TestDeltaLakeGlueMetastore.java index c9d114bc5856..b326af431e7b 100644 --- a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/metastore/glue/TestDeltaLakeGlueMetastore.java +++ b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/metastore/glue/TestDeltaLakeGlueMetastore.java @@ -22,8 +22,6 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.bootstrap.LifeCycleManager; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.trace.Tracer; import io.trino.filesystem.manager.FileSystemModule; import io.trino.metastore.Column; import io.trino.metastore.Database; @@ -31,22 +29,18 @@ import io.trino.metastore.HiveMetastoreFactory; import io.trino.metastore.PrincipalPrivileges; import io.trino.metastore.Table; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.session.SessionPropertiesProvider; import io.trino.plugin.deltalake.DeltaLakeMetadata; import io.trino.plugin.deltalake.DeltaLakeMetadataFactory; import io.trino.plugin.deltalake.DeltaLakeModule; import io.trino.plugin.deltalake.DeltaLakeSecurityModule; import io.trino.plugin.deltalake.metastore.DeltaLakeMetastoreModule; -import io.trino.plugin.hive.NodeVersion; -import io.trino.spi.Node; -import io.trino.spi.PageIndexerFactory; import io.trino.spi.TrinoException; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.RelationColumnsMetadata; import io.trino.spi.connector.SchemaTableName; import io.trino.spi.connector.SchemaTablePrefix; -import io.trino.spi.type.TypeManager; import io.trino.testing.TestingConnectorContext; import io.trino.testing.TestingConnectorSession; import org.junit.jupiter.api.AfterAll; @@ -118,21 +112,13 @@ public void setUp() Bootstrap app = new Bootstrap( // connector dependencies new JsonModule(), - binder -> { - binder.bind(CatalogName.class).toInstance(new CatalogName("test")); - binder.bind(TypeManager.class).toInstance(context.getTypeManager()); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory()); - binder.bind(NodeVersion.class).toInstance(new NodeVersion("test_version")); - binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); - binder.bind(Tracer.class).toInstance(context.getTracer()); - }, + new ConnectorContextModule("test", context), // connector modules new DeltaLakeMetastoreModule(), new DeltaLakeModule(), new DeltaLakeSecurityModule(), // test setup - new FileSystemModule("test", context.getCurrentNode().isCoordinator(), context.getOpenTelemetry(), false)); + new FileSystemModule("test", context, false)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorFactory.java b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorFactory.java index 22da4734f5fd..9533e9d372d3 100644 --- a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorFactory.java +++ b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorFactory.java @@ -16,11 +16,10 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; import io.trino.plugin.base.jmx.MBeanServerModule; -import io.trino.spi.Node; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; @@ -55,12 +54,9 @@ public Connector create(String catalogName, Map config, Connecto new MBeanServerModule(), new ConnectorObjectNameGeneratorModule("io.trino.plugin.elasticsearch", "trino.plugin.elasticsearch"), new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), new ElasticsearchConnectorModule(), - binder -> { - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }); + new ConnectorContextModule(catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-example-http/src/main/java/io/trino/plugin/example/ExampleConnectorFactory.java b/plugin/trino-example-http/src/main/java/io/trino/plugin/example/ExampleConnectorFactory.java index 1622437f4719..0e4faef478f1 100644 --- a/plugin/trino-example-http/src/main/java/io/trino/plugin/example/ExampleConnectorFactory.java +++ b/plugin/trino-example-http/src/main/java/io/trino/plugin/example/ExampleConnectorFactory.java @@ -16,6 +16,7 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; @@ -44,7 +45,8 @@ public Connector create(String catalogName, Map requiredConfig, // A plugin is not required to use Guice; it is just very convenient Bootstrap app = new Bootstrap( new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), + new ConnectorContextModule(catalogName, context), new ExampleModule()); Injector injector = app diff --git a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnectorFactory.java b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnectorFactory.java index 5f5fef375d7c..09f853312ffc 100644 --- a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnectorFactory.java +++ b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnectorFactory.java @@ -16,6 +16,7 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; @@ -44,7 +45,8 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), + new ConnectorContextModule(catalogName, context), new SheetsModule()); Injector injector = app diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveConnectorFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveConnectorFactory.java index a16c7551992b..fee72beacc75 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveConnectorFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveConnectorFactory.java @@ -20,12 +20,10 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.bootstrap.LifeCycleManager; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.trace.Tracer; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.filesystem.manager.FileSystemModule; import io.trino.metastore.HiveMetastore; -import io.trino.plugin.base.CatalogNameModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorAccessControl; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSinkProvider; @@ -39,12 +37,6 @@ import io.trino.plugin.hive.procedure.HiveProcedureModule; import io.trino.plugin.hive.security.HiveSecurityModule; import io.trino.plugin.hive.security.SystemTableAwareAccessControl; -import io.trino.spi.Node; -import io.trino.spi.NodeManager; -import io.trino.spi.PageIndexerFactory; -import io.trino.spi.PageSorter; -import io.trino.spi.VersionEmbedder; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.classloader.ThreadContextClassLoader; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorAccessControl; @@ -54,7 +46,6 @@ import io.trino.spi.connector.ConnectorPageSinkProvider; import io.trino.spi.connector.ConnectorPageSourceProvider; import io.trino.spi.connector.ConnectorSplitManager; -import io.trino.spi.connector.MetadataProvider; import io.trino.spi.connector.TableProcedureMetadata; import io.trino.spi.procedure.Procedure; import org.weakref.jmx.guice.MBeanModule; @@ -95,31 +86,19 @@ public static Connector createConnector( try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) { Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new CatalogNameModule(catalogName), new MBeanModule(), new ConnectorObjectNameGeneratorModule("io.trino.plugin.hive", "trino.plugin.hive"), new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), new HiveModule(), new HiveMetastoreModule(metastore), new HiveSecurityModule(), fileSystemFactory .map(factory -> (Module) binder -> binder.bind(TrinoFileSystemFactory.class).toInstance(factory)) - .orElseGet(() -> new FileSystemModule(catalogName, context.getCurrentNode().isCoordinator(), context.getOpenTelemetry(), false)), + .orElseGet(() -> new FileSystemModule(catalogName, context, false)), new HiveProcedureModule(), new MBeanServerModule(), - binder -> { - binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); - binder.bind(Tracer.class).toInstance(context.getTracer()); - binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getCurrentNode().getVersion())); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(NodeManager.class).toInstance(context.getNodeManager()); - binder.bind(VersionEmbedder.class).toInstance(context.getVersionEmbedder()); - binder.bind(MetadataProvider.class).toInstance(context.getMetadataProvider()); - binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory()); - binder.bind(PageSorter.class).toInstance(context.getPageSorter()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }, + new ConnectorContextModule(catalogName, context), binder -> newSetBinder(binder, SessionPropertiesProvider.class).addBinding().to(HiveSessionProperties.class).in(Scopes.SINGLETON), module); diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadataFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadataFactory.java index 6c2e71331750..31c45bc365a3 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadataFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadataFactory.java @@ -27,6 +27,7 @@ import io.trino.plugin.hive.security.AccessControlMetadataFactory; import io.trino.plugin.hive.security.UsingSystemSecurity; import io.trino.plugin.hive.statistics.MetastoreHiveStatisticsProvider; +import io.trino.spi.NodeVersion; import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.MetadataProvider; import io.trino.spi.security.ConnectorIdentity; diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/RcFileFileWriterFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/RcFileFileWriterFactory.java index 3b2e0fbb984c..aa3ba3ce3c59 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/RcFileFileWriterFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/RcFileFileWriterFactory.java @@ -26,6 +26,7 @@ import io.trino.memory.context.AggregatedMemoryContext; import io.trino.metastore.StorageFormat; import io.trino.plugin.hive.acid.AcidTransaction; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.Type; diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/avro/AvroFileWriterFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/avro/AvroFileWriterFactory.java index 7d81ad3249b4..49e98aa2cc1a 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/avro/AvroFileWriterFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/avro/AvroFileWriterFactory.java @@ -29,9 +29,9 @@ import io.trino.plugin.hive.HiveCompressionCodec; import io.trino.plugin.hive.HiveFileWriterFactory; import io.trino.plugin.hive.HiveTimestampPrecision; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.WriterKind; import io.trino.plugin.hive.acid.AcidTransaction; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.Type; diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/line/SimpleSequenceFileWriterFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/line/SimpleSequenceFileWriterFactory.java index f1aa4bd4883f..19a0a91ad59b 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/line/SimpleSequenceFileWriterFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/line/SimpleSequenceFileWriterFactory.java @@ -17,7 +17,7 @@ import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.hive.formats.line.sequence.SequenceFileWriterFactory; import io.trino.hive.formats.line.simple.SimpleSerializerFactory; -import io.trino.plugin.hive.NodeVersion; +import io.trino.spi.NodeVersion; import io.trino.spi.type.TypeManager; import static io.trino.hive.formats.line.sequence.ValueType.TEXT; diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastore.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastore.java index 9ec3ee2c3fd4..5e63798f78fa 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastore.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastore.java @@ -44,10 +44,10 @@ import io.trino.metastore.Table; import io.trino.metastore.TableAlreadyExistsException; import io.trino.metastore.TableInfo; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.PartitionNotFoundException; import io.trino.plugin.hive.TableType; import io.trino.plugin.hive.metastore.file.FileHiveMetastoreConfig.VersionCompatibility; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.connector.ColumnNotFoundException; import io.trino.spi.connector.SchemaNotFoundException; diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastoreFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastoreFactory.java index 6d1a9101c7a4..cfc450ef6fca 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastoreFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastoreFactory.java @@ -20,7 +20,7 @@ import io.trino.metastore.HiveMetastoreFactory; import io.trino.metastore.tracing.TracingHiveMetastore; import io.trino.plugin.hive.HideDeltaLakeTables; -import io.trino.plugin.hive.NodeVersion; +import io.trino.spi.NodeVersion; import io.trino.spi.security.ConnectorIdentity; import java.util.Optional; diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/orc/OrcFileWriterFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/orc/OrcFileWriterFactory.java index 148335703b5e..322056313178 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/orc/OrcFileWriterFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/orc/OrcFileWriterFactory.java @@ -31,9 +31,9 @@ import io.trino.plugin.hive.FileWriter; import io.trino.plugin.hive.HiveCompressionCodec; import io.trino.plugin.hive.HiveFileWriterFactory; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.WriterKind; import io.trino.plugin.hive.acid.AcidTransaction; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.Type; diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/parquet/ParquetFileWriterFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/parquet/ParquetFileWriterFactory.java index bc3f944b6f9b..f1be32b946ac 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/parquet/ParquetFileWriterFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/parquet/ParquetFileWriterFactory.java @@ -29,9 +29,9 @@ import io.trino.plugin.hive.HiveConfig; import io.trino.plugin.hive.HiveFileWriterFactory; import io.trino.plugin.hive.HiveSessionProperties; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.WriterKind; import io.trino.plugin.hive.acid.AcidTransaction; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.Type; diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/HiveTestUtils.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/HiveTestUtils.java index 0b551e13a6a0..3a96d1816d14 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/HiveTestUtils.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/HiveTestUtils.java @@ -58,6 +58,7 @@ import io.trino.plugin.hive.parquet.ParquetReaderConfig; import io.trino.plugin.hive.parquet.ParquetWriterConfig; import io.trino.plugin.hive.rcfile.RcFilePageSourceFactory; +import io.trino.spi.NodeVersion; import io.trino.spi.PageSorter; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.ArrayType; diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestHiveFileFormats.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestHiveFileFormats.java index 0960d6b29fcd..95d95365b225 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestHiveFileFormats.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestHiveFileFormats.java @@ -52,6 +52,7 @@ import io.trino.plugin.hive.parquet.ParquetWriterConfig; import io.trino.plugin.hive.rcfile.RcFilePageSourceFactory; import io.trino.plugin.hive.util.HiveTypeTranslator; +import io.trino.spi.NodeVersion; import io.trino.spi.Page; import io.trino.spi.PageBuilder; import io.trino.spi.block.ArrayBlockBuilder; diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/metastore/file/TestFileHiveMetastore.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/metastore/file/TestFileHiveMetastore.java index 281f14c730fb..6373e74a8752 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/metastore/file/TestFileHiveMetastore.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/metastore/file/TestFileHiveMetastore.java @@ -20,8 +20,8 @@ import io.trino.metastore.HiveMetastore; import io.trino.metastore.StorageFormat; import io.trino.metastore.Table; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.metastore.AbstractTestHiveMetastore; +import io.trino.spi.NodeVersion; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/metastore/file/TestingFileHiveMetastore.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/metastore/file/TestingFileHiveMetastore.java index 360e613cfbae..cb87d01ff4a9 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/metastore/file/TestingFileHiveMetastore.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/metastore/file/TestingFileHiveMetastore.java @@ -16,8 +16,8 @@ import io.trino.filesystem.Location; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.filesystem.local.LocalFileSystemFactory; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.metastore.HiveMetastoreConfig; +import io.trino.spi.NodeVersion; import java.io.File; diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/orc/TestOrcPredicates.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/orc/TestOrcPredicates.java index e7f61efbfa01..b9e1df49ae35 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/orc/TestOrcPredicates.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/orc/TestOrcPredicates.java @@ -30,10 +30,10 @@ import io.trino.plugin.hive.HiveCompressionCodec; import io.trino.plugin.hive.HiveConfig; import io.trino.plugin.hive.HivePageSourceProvider; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.Schema; import io.trino.plugin.hive.WriterKind; import io.trino.plugin.hive.util.HiveTypeTranslator; +import io.trino.spi.NodeVersion; import io.trino.spi.Page; import io.trino.spi.block.Block; import io.trino.spi.block.IntArrayBlock; diff --git a/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java b/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java index 1e8201c75925..6090ae483a19 100644 --- a/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java +++ b/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java @@ -20,19 +20,14 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.bootstrap.LifeCycleManager; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.trace.Tracer; import io.trino.filesystem.manager.FileSystemModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager; import io.trino.plugin.base.classloader.ClassLoaderSafeNodePartitioningProvider; import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.base.session.SessionPropertiesProvider; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.metastore.HiveMetastoreModule; -import io.trino.spi.Node; -import io.trino.spi.NodeManager; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.classloader.ThreadContextClassLoader; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; @@ -40,7 +35,6 @@ import io.trino.spi.connector.ConnectorNodePartitioningProvider; import io.trino.spi.connector.ConnectorPageSourceProvider; import io.trino.spi.connector.ConnectorSplitManager; -import io.trino.spi.type.TypeManager; import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -80,18 +74,10 @@ public static Connector createConnector( new JsonModule(), new HudiModule(), new HiveMetastoreModule(Optional.empty()), - new FileSystemModule(catalogName, context.getCurrentNode().isCoordinator(), context.getOpenTelemetry(), false), + new FileSystemModule(catalogName, context, false), new MBeanServerModule(), module.orElse(EMPTY_MODULE), - binder -> { - binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); - binder.bind(Tracer.class).toInstance(context.getTracer()); - binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getCurrentNode().getVersion())); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(NodeManager.class).toInstance(context.getNodeManager()); - binder.bind(TypeManager.class).toInstance(context.getTypeManager()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }); + new ConnectorContextModule(catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java index e8854cd9c3df..bd6160ce57e8 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java @@ -20,24 +20,16 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.configuration.AbstractConfigurationAwareModule; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.trace.Tracer; import io.trino.filesystem.manager.FileSystemModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.hive.HiveConfig; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.iceberg.catalog.IcebergCatalogModule; -import io.trino.spi.Node; -import io.trino.spi.NodeManager; -import io.trino.spi.PageIndexerFactory; -import io.trino.spi.PageSorter; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.classloader.ThreadContextClassLoader; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import io.trino.spi.type.TypeManager; import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -82,18 +74,10 @@ public static Connector createConnector( new IcebergSecurityModule(), icebergCatalogModule.orElse(new IcebergCatalogModule()), new MBeanServerModule(), - new IcebergFileSystemModule(catalogName, context.getCurrentNode().isCoordinator(), context.getOpenTelemetry()), + new IcebergFileSystemModule(catalogName, context), + new ConnectorContextModule(catalogName, context), binder -> { binder.bind(ClassLoader.class).toInstance(IcebergConnectorFactory.class.getClassLoader()); - binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); - binder.bind(Tracer.class).toInstance(context.getTracer()); - binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getCurrentNode().getVersion())); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(NodeManager.class).toInstance(context.getNodeManager()); - binder.bind(TypeManager.class).toInstance(context.getTypeManager()); - binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - binder.bind(PageSorter.class).toInstance(context.getPageSorter()); }, module); @@ -112,21 +96,19 @@ private static class IcebergFileSystemModule extends AbstractConfigurationAwareModule { private final String catalogName; - private final boolean isCoordinator; - private final OpenTelemetry openTelemetry; + private final ConnectorContext context; - public IcebergFileSystemModule(String catalogName, boolean isCoordinator, OpenTelemetry openTelemetry) + public IcebergFileSystemModule(String catalogName, ConnectorContext context) { this.catalogName = requireNonNull(catalogName, "catalogName is null"); - this.isCoordinator = isCoordinator; - this.openTelemetry = requireNonNull(openTelemetry, "openTelemetry is null"); + this.context = requireNonNull(context, "context is null"); } @Override protected void setup(Binder binder) { boolean metadataCacheEnabled = buildConfigObject(IcebergConfig.class).isMetadataCacheEnabled(); - install(new FileSystemModule(catalogName, isCoordinator, openTelemetry, metadataCacheEnabled)); + install(new FileSystemModule(catalogName, context, metadataCacheEnabled)); } } } diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergEnvironmentContext.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergEnvironmentContext.java index 972695368987..b3ebc895c331 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergEnvironmentContext.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergEnvironmentContext.java @@ -14,7 +14,7 @@ package io.trino.plugin.iceberg; import com.google.inject.Inject; -import io.trino.plugin.hive.NodeVersion; +import io.trino.spi.NodeVersion; import org.apache.iceberg.EnvironmentContext; import static java.util.Objects.requireNonNull; diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergFileWriterFactory.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergFileWriterFactory.java index 23954907cd95..332b3117ecdc 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergFileWriterFactory.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergFileWriterFactory.java @@ -32,9 +32,9 @@ import io.trino.plugin.base.metrics.FileFormatDataSourceStats; import io.trino.plugin.hive.HiveCompressionCodec; import io.trino.plugin.hive.HiveCompressionOption; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.orc.OrcWriterConfig; import io.trino.plugin.iceberg.fileio.ForwardingOutputFile; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.type.Type; diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/TableStatisticsWriter.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/TableStatisticsWriter.java index 69674474326c..56ce1fb3e3ba 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/TableStatisticsWriter.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/TableStatisticsWriter.java @@ -19,7 +19,7 @@ import com.google.common.graph.Traverser; import com.google.inject.Inject; import io.trino.plugin.base.io.ByteBuffers; -import io.trino.plugin.hive.NodeVersion; +import io.trino.spi.NodeVersion; import io.trino.spi.connector.ConnectorSession; import org.apache.datasketches.memory.Memory; import org.apache.datasketches.theta.CompactSketch; diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/TrinoGlueCatalogFactory.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/TrinoGlueCatalogFactory.java index 1aae3ab1a709..5b6b8e57ac25 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/TrinoGlueCatalogFactory.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/TrinoGlueCatalogFactory.java @@ -16,7 +16,6 @@ import com.google.inject.Inject; import io.airlift.concurrent.BoundedExecutor; import io.trino.filesystem.TrinoFileSystemFactory; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.metastore.glue.GlueHiveMetastoreConfig; import io.trino.plugin.hive.metastore.glue.GlueMetastoreStats; import io.trino.plugin.hive.security.UsingSystemSecurity; @@ -26,6 +25,7 @@ import io.trino.plugin.iceberg.catalog.TrinoCatalog; import io.trino.plugin.iceberg.catalog.TrinoCatalogFactory; import io.trino.plugin.iceberg.fileio.ForwardingFileIoFactory; +import io.trino.spi.NodeVersion; import io.trino.spi.catalog.CatalogName; import io.trino.spi.security.ConnectorIdentity; import io.trino.spi.type.TypeManager; diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/TrinoHiveCatalogFactory.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/TrinoHiveCatalogFactory.java index 7eb40e177ef6..b8476a0a6601 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/TrinoHiveCatalogFactory.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/TrinoHiveCatalogFactory.java @@ -18,7 +18,6 @@ import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.metastore.HiveMetastoreFactory; import io.trino.metastore.cache.CachingHiveMetastore; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.TrinoViewHiveMetastore; import io.trino.plugin.hive.security.UsingSystemSecurity; import io.trino.plugin.iceberg.ForIcebergMetadata; @@ -27,6 +26,7 @@ import io.trino.plugin.iceberg.catalog.TrinoCatalog; import io.trino.plugin.iceberg.catalog.TrinoCatalogFactory; import io.trino.plugin.iceberg.fileio.ForwardingFileIoFactory; +import io.trino.spi.NodeVersion; import io.trino.spi.catalog.CatalogName; import io.trino.spi.security.ConnectorIdentity; import io.trino.spi.type.TypeManager; diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/rest/TrinoIcebergRestCatalogFactory.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/rest/TrinoIcebergRestCatalogFactory.java index 044070a8bc8d..46fc068c9f89 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/rest/TrinoIcebergRestCatalogFactory.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/rest/TrinoIcebergRestCatalogFactory.java @@ -20,13 +20,13 @@ import com.google.inject.Inject; import io.airlift.units.Duration; import io.trino.cache.EvictableCacheBuilder; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.iceberg.IcebergConfig; import io.trino.plugin.iceberg.IcebergFileSystemFactory; import io.trino.plugin.iceberg.catalog.TrinoCatalog; import io.trino.plugin.iceberg.catalog.TrinoCatalogFactory; import io.trino.plugin.iceberg.catalog.rest.IcebergRestCatalogConfig.SessionType; import io.trino.plugin.iceberg.fileio.ForwardingFileIoFactory; +import io.trino.spi.NodeVersion; import io.trino.spi.catalog.CatalogName; import io.trino.spi.security.ConnectorIdentity; import io.trino.spi.type.TypeManager; diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/BaseTrinoCatalogTest.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/BaseTrinoCatalogTest.java index e7eaea463184..212d9c282390 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/BaseTrinoCatalogTest.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/BaseTrinoCatalogTest.java @@ -19,7 +19,6 @@ import io.trino.metastore.TableInfo; import io.trino.metastore.TableInfo.ExtendedRelationType; import io.trino.plugin.base.util.AutoCloseableCloser; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.orc.OrcReaderConfig; import io.trino.plugin.hive.orc.OrcWriterConfig; import io.trino.plugin.hive.parquet.ParquetReaderConfig; @@ -30,6 +29,7 @@ import io.trino.plugin.iceberg.IcebergMetadata; import io.trino.plugin.iceberg.IcebergSessionProperties; import io.trino.plugin.iceberg.TableStatisticsWriter; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorMaterializedViewDefinition; import io.trino.spi.connector.ConnectorMetadata; diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/file/TestIcebergFileMetastoreCreateTableFailure.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/file/TestIcebergFileMetastoreCreateTableFailure.java index 3196539ce7a7..5f445fe71803 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/file/TestIcebergFileMetastoreCreateTableFailure.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/file/TestIcebergFileMetastoreCreateTableFailure.java @@ -18,11 +18,11 @@ import io.trino.metastore.HiveMetastore; import io.trino.metastore.PrincipalPrivileges; import io.trino.metastore.Table; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.metastore.HiveMetastoreConfig; import io.trino.plugin.hive.metastore.file.FileHiveMetastore; import io.trino.plugin.hive.metastore.file.FileHiveMetastoreConfig; import io.trino.plugin.iceberg.TestingIcebergPlugin; +import io.trino.spi.NodeVersion; import io.trino.spi.connector.SchemaNotFoundException; import io.trino.testing.AbstractTestQueryFramework; import io.trino.testing.DistributedQueryRunner; diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/glue/TestTrinoGlueCatalog.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/glue/TestTrinoGlueCatalog.java index 3ddacdd76311..205953755646 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/glue/TestTrinoGlueCatalog.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/glue/TestTrinoGlueCatalog.java @@ -18,7 +18,6 @@ import io.airlift.log.Logger; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.metastore.TableInfo; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.metastore.glue.GlueMetastoreStats; import io.trino.plugin.iceberg.CommitTaskData; import io.trino.plugin.iceberg.IcebergConfig; @@ -26,6 +25,7 @@ import io.trino.plugin.iceberg.TableStatisticsWriter; import io.trino.plugin.iceberg.catalog.BaseTrinoCatalogTest; import io.trino.plugin.iceberg.catalog.TrinoCatalog; +import io.trino.spi.NodeVersion; import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.ConnectorMaterializedViewDefinition; import io.trino.spi.connector.ConnectorMetadata; diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/nessie/TestTrinoNessieCatalog.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/nessie/TestTrinoNessieCatalog.java index c4549d64e9a2..a9f793998ee5 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/nessie/TestTrinoNessieCatalog.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/nessie/TestTrinoNessieCatalog.java @@ -16,13 +16,13 @@ import com.google.common.collect.ImmutableMap; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.filesystem.hdfs.HdfsFileSystemFactory; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.iceberg.CommitTaskData; import io.trino.plugin.iceberg.IcebergMetadata; import io.trino.plugin.iceberg.TableStatisticsWriter; import io.trino.plugin.iceberg.catalog.BaseTrinoCatalogTest; import io.trino.plugin.iceberg.catalog.TrinoCatalog; import io.trino.plugin.iceberg.containers.NessieContainer; +import io.trino.spi.NodeVersion; import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.ConnectorMetadata; import io.trino.spi.connector.SchemaTableName; diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/rest/TestTrinoRestCatalog.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/rest/TestTrinoRestCatalog.java index 12094a1bae1a..ea86015a3bfb 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/rest/TestTrinoRestCatalog.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/rest/TestTrinoRestCatalog.java @@ -16,12 +16,12 @@ import com.google.common.collect.ImmutableMap; import io.trino.cache.EvictableCacheBuilder; import io.trino.metastore.TableInfo; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.iceberg.CommitTaskData; import io.trino.plugin.iceberg.IcebergMetadata; import io.trino.plugin.iceberg.TableStatisticsWriter; import io.trino.plugin.iceberg.catalog.BaseTrinoCatalogTest; import io.trino.plugin.iceberg.catalog.TrinoCatalog; +import io.trino.spi.NodeVersion; import io.trino.spi.TrinoException; import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.ConnectorMetadata; diff --git a/plugin/trino-iceberg/src/test/java/org/apache/iceberg/snowflake/TestTrinoSnowflakeCatalog.java b/plugin/trino-iceberg/src/test/java/org/apache/iceberg/snowflake/TestTrinoSnowflakeCatalog.java index 0d2e47cc31c7..83e492561b7f 100644 --- a/plugin/trino-iceberg/src/test/java/org/apache/iceberg/snowflake/TestTrinoSnowflakeCatalog.java +++ b/plugin/trino-iceberg/src/test/java/org/apache/iceberg/snowflake/TestTrinoSnowflakeCatalog.java @@ -21,7 +21,6 @@ import io.trino.filesystem.s3.S3FileSystemFactory; import io.trino.filesystem.s3.S3FileSystemStats; import io.trino.metastore.TableInfo; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.iceberg.ColumnIdentity; import io.trino.plugin.iceberg.CommitTaskData; import io.trino.plugin.iceberg.IcebergMetadata; @@ -33,6 +32,7 @@ import io.trino.plugin.iceberg.catalog.snowflake.SnowflakeIcebergTableOperationsProvider; import io.trino.plugin.iceberg.catalog.snowflake.TestingSnowflakeServer; import io.trino.plugin.iceberg.catalog.snowflake.TrinoSnowflakeCatalog; +import io.trino.spi.NodeVersion; import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.ConnectorMetadata; import io.trino.spi.connector.ConnectorViewDefinition; diff --git a/plugin/trino-jmx/src/main/java/io/trino/plugin/jmx/JmxConnectorFactory.java b/plugin/trino-jmx/src/main/java/io/trino/plugin/jmx/JmxConnectorFactory.java index ce8cb497bf37..3301baf4ee14 100644 --- a/plugin/trino-jmx/src/main/java/io/trino/plugin/jmx/JmxConnectorFactory.java +++ b/plugin/trino-jmx/src/main/java/io/trino/plugin/jmx/JmxConnectorFactory.java @@ -16,9 +16,8 @@ import com.google.inject.Injector; import com.google.inject.Scopes; import io.airlift.bootstrap.Bootstrap; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.jmx.MBeanServerModule; -import io.trino.spi.Node; -import io.trino.spi.NodeManager; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; @@ -49,10 +48,9 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, new MBeanServerModule(), + new ConnectorContextModule(catalogName, context), binder -> { configBinder(binder).bindConfig(JmxConnectorConfig.class); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(NodeManager.class).toInstance(context.getNodeManager()); binder.bind(JmxConnector.class).in(Scopes.SINGLETON); binder.bind(JmxHistoricalData.class).in(Scopes.SINGLETON); binder.bind(JmxMetadata.class).in(Scopes.SINGLETON); diff --git a/plugin/trino-jmx/src/test/java/io/trino/plugin/jmx/TestJmxSplitManager.java b/plugin/trino-jmx/src/test/java/io/trino/plugin/jmx/TestJmxSplitManager.java index f3cfb1d13e35..a21fd13094fa 100644 --- a/plugin/trino-jmx/src/test/java/io/trino/plugin/jmx/TestJmxSplitManager.java +++ b/plugin/trino-jmx/src/test/java/io/trino/plugin/jmx/TestJmxSplitManager.java @@ -23,7 +23,6 @@ import io.trino.spi.Node; import io.trino.spi.NodeManager; import io.trino.spi.connector.ColumnHandle; -import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorSplit; import io.trino.spi.connector.ConnectorSplitSource; import io.trino.spi.connector.ConnectorTransactionHandle; @@ -33,6 +32,7 @@ import io.trino.spi.connector.SchemaTableName; import io.trino.spi.predicate.NullableValue; import io.trino.spi.predicate.TupleDomain; +import io.trino.testing.TestingConnectorContext; import io.trino.testing.TestingNodeManager; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; @@ -85,14 +85,7 @@ public class TestJmxSplitManager "jmx.dump-period", format("%dms", JMX_STATS_DUMP.toMillis()), "jmx.max-entries", "1000", "bootstrap.quiet", "true"), - new ConnectorContext() - { - @Override - public NodeManager getNodeManager() - { - return nodeManager; - } - }); + new TestingConnectorContext(nodeManager)); private final JmxColumnHandle columnHandle = new JmxColumnHandle("node", createUnboundedVarcharType()); diff --git a/plugin/trino-kafka/src/main/java/io/trino/plugin/kafka/KafkaConnectorFactory.java b/plugin/trino-kafka/src/main/java/io/trino/plugin/kafka/KafkaConnectorFactory.java index 290c4316a78e..1556c809016c 100644 --- a/plugin/trino-kafka/src/main/java/io/trino/plugin/kafka/KafkaConnectorFactory.java +++ b/plugin/trino-kafka/src/main/java/io/trino/plugin/kafka/KafkaConnectorFactory.java @@ -18,13 +18,12 @@ import com.google.inject.Module; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; -import io.trino.plugin.base.CatalogNameModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.plugin.kafka.security.KafkaSecurityModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import io.trino.spi.type.TypeManager; import java.util.List; import java.util.Map; @@ -58,15 +57,14 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, ImmutableList.builder() - .add(new CatalogNameModule(catalogName)) .add(new JsonModule()) - .add(new TypeDeserializerModule(context.getTypeManager())) + .add(new TypeDeserializerModule()) .add(new KafkaConnectorModule(context.getTypeManager())) .add(new KafkaClientsModule()) .add(new KafkaSecurityModule()) + .add(new ConnectorContextModule(catalogName, context)) .add(binder -> { binder.bind(ClassLoader.class).toInstance(KafkaConnectorFactory.class.getClassLoader()); - binder.bind(TypeManager.class).toInstance(context.getTypeManager()); }) .addAll(extensions) .build()); diff --git a/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseConnectorFactory.java b/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseConnectorFactory.java index b0fc676c3e62..85149e3eaba0 100644 --- a/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseConnectorFactory.java +++ b/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseConnectorFactory.java @@ -16,24 +16,15 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.trace.Tracer; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; import io.trino.plugin.base.jmx.MBeanServerModule; -import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.security.HiveSecurityModule; -import io.trino.spi.Node; -import io.trino.spi.NodeManager; -import io.trino.spi.PageIndexerFactory; -import io.trino.spi.PageSorter; -import io.trino.spi.VersionEmbedder; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.classloader.ThreadContextClassLoader; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import io.trino.spi.connector.MetadataProvider; import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -60,26 +51,15 @@ public Connector create(String catalogName, Map config, Connecto new MBeanServerModule(), new ConnectorObjectNameGeneratorModule("io.trino.plugin", "trino.plugin"), new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), new LakehouseModule(), new LakehouseHiveModule(), new LakehouseIcebergModule(), new LakehouseDeltaModule(), new LakehouseHudiModule(), new HiveSecurityModule(), - new LakehouseFileSystemModule(catalogName, context.getCurrentNode().isCoordinator(), context.getOpenTelemetry()), - binder -> { - binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); - binder.bind(Tracer.class).toInstance(context.getTracer()); - binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getCurrentNode().getVersion())); - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(NodeManager.class).toInstance(context.getNodeManager()); - binder.bind(VersionEmbedder.class).toInstance(context.getVersionEmbedder()); - binder.bind(MetadataProvider.class).toInstance(context.getMetadataProvider()); - binder.bind(PageIndexerFactory.class).toInstance(context.getPageIndexerFactory()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - binder.bind(PageSorter.class).toInstance(context.getPageSorter()); - }); + new LakehouseFileSystemModule(catalogName, context), + new ConnectorContextModule(catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseFileSystemModule.java b/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseFileSystemModule.java index b480c4311d96..cbf15c2b6a44 100644 --- a/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseFileSystemModule.java +++ b/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseFileSystemModule.java @@ -15,9 +15,9 @@ import com.google.inject.Binder; import io.airlift.configuration.AbstractConfigurationAwareModule; -import io.opentelemetry.api.OpenTelemetry; import io.trino.filesystem.manager.FileSystemModule; import io.trino.plugin.iceberg.IcebergConfig; +import io.trino.spi.connector.ConnectorContext; import static java.util.Objects.requireNonNull; @@ -25,20 +25,18 @@ class LakehouseFileSystemModule extends AbstractConfigurationAwareModule { private final String catalogName; - private final boolean isCoordinator; - private final OpenTelemetry openTelemetry; + private final ConnectorContext context; - public LakehouseFileSystemModule(String catalogName, boolean isCoordinator, OpenTelemetry openTelemetry) + public LakehouseFileSystemModule(String catalogName, ConnectorContext context) { this.catalogName = requireNonNull(catalogName, "catalogName is null"); - this.isCoordinator = isCoordinator; - this.openTelemetry = openTelemetry; + this.context = requireNonNull(context, "context is null"); } @Override protected void setup(Binder binder) { boolean metadataCacheEnabled = buildConfigObject(IcebergConfig.class).isMetadataCacheEnabled(); - install(new FileSystemModule(catalogName, isCoordinator, openTelemetry, metadataCacheEnabled)); + install(new FileSystemModule(catalogName, context, metadataCacheEnabled)); } } diff --git a/plugin/trino-loki/src/main/java/io/trino/plugin/loki/LokiConnectorFactory.java b/plugin/trino-loki/src/main/java/io/trino/plugin/loki/LokiConnectorFactory.java index 65328a27e045..3468101ce35c 100644 --- a/plugin/trino-loki/src/main/java/io/trino/plugin/loki/LokiConnectorFactory.java +++ b/plugin/trino-loki/src/main/java/io/trino/plugin/loki/LokiConnectorFactory.java @@ -16,6 +16,7 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; @@ -47,7 +48,8 @@ public Connector create(String catalogName, Map requiredConfig, Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), + new ConnectorContextModule(catalogName, context), new LokiModule()); Injector injector = app diff --git a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnectorFactory.java b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnectorFactory.java index c5e62c42f8c7..50f0cc252e61 100644 --- a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnectorFactory.java +++ b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnectorFactory.java @@ -16,11 +16,10 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import io.trino.spi.type.TypeManager; import java.util.Map; @@ -56,8 +55,7 @@ public Connector create(String catalogName, Map config, Connecto "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), new MongoClientModule(), - binder -> binder.bind(TypeManager.class).toInstance(context.getTypeManager()), - binder -> binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry())); + new ConnectorContextModule(catalogName, context)); Injector injector = app.doNotInitializeLogging() .setRequiredConfigurationProperties(config) diff --git a/plugin/trino-opensearch/src/main/java/io/trino/plugin/opensearch/OpenSearchConnectorFactory.java b/plugin/trino-opensearch/src/main/java/io/trino/plugin/opensearch/OpenSearchConnectorFactory.java index 5732a8eea9cf..0bed9d3e3aa3 100644 --- a/plugin/trino-opensearch/src/main/java/io/trino/plugin/opensearch/OpenSearchConnectorFactory.java +++ b/plugin/trino-opensearch/src/main/java/io/trino/plugin/opensearch/OpenSearchConnectorFactory.java @@ -16,11 +16,10 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; import io.trino.plugin.base.jmx.MBeanServerModule; -import io.trino.spi.Node; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; @@ -55,12 +54,9 @@ public Connector create(String catalogName, Map config, Connecto new MBeanServerModule(), new ConnectorObjectNameGeneratorModule("io.trino.plugin.opensearch", "trino.plugin.opensearch"), new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), new OpenSearchConnectorModule(), - binder -> { - binder.bind(Node.class).toInstance(context.getCurrentNode()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }); + new ConnectorContextModule(catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-pinot/src/main/java/io/trino/plugin/pinot/PinotConnectorFactory.java b/plugin/trino-pinot/src/main/java/io/trino/plugin/pinot/PinotConnectorFactory.java index 100154a3101e..b8523641bd7c 100755 --- a/plugin/trino-pinot/src/main/java/io/trino/plugin/pinot/PinotConnectorFactory.java +++ b/plugin/trino-pinot/src/main/java/io/trino/plugin/pinot/PinotConnectorFactory.java @@ -18,6 +18,7 @@ import com.google.inject.Module; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.pinot.auth.PinotAuthenticationModule; @@ -59,7 +60,8 @@ public Connector create(String catalogName, Map config, Connecto .add(new JsonModule()) .add(new MBeanModule()) .add(new MBeanServerModule()) - .add(new TypeDeserializerModule(context.getTypeManager())) + .add(new TypeDeserializerModule()) + .add(new ConnectorContextModule(catalogName, context)) .add(new PinotModule(catalogName)) .add(new PinotAuthenticationModule()); diff --git a/plugin/trino-prometheus/src/main/java/io/trino/plugin/prometheus/PrometheusConnectorFactory.java b/plugin/trino-prometheus/src/main/java/io/trino/plugin/prometheus/PrometheusConnectorFactory.java index c451b6284039..6c1f6006d31f 100644 --- a/plugin/trino-prometheus/src/main/java/io/trino/plugin/prometheus/PrometheusConnectorFactory.java +++ b/plugin/trino-prometheus/src/main/java/io/trino/plugin/prometheus/PrometheusConnectorFactory.java @@ -16,6 +16,7 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; @@ -47,7 +48,8 @@ public Connector create(String catalogName, Map requiredConfig, Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), + new ConnectorContextModule(catalogName, context), new PrometheusModule()); Injector injector = app diff --git a/plugin/trino-redis/src/main/java/io/trino/plugin/redis/RedisConnectorFactory.java b/plugin/trino-redis/src/main/java/io/trino/plugin/redis/RedisConnectorFactory.java index 4838142ddcbf..b0eeef8bc53d 100644 --- a/plugin/trino-redis/src/main/java/io/trino/plugin/redis/RedisConnectorFactory.java +++ b/plugin/trino-redis/src/main/java/io/trino/plugin/redis/RedisConnectorFactory.java @@ -18,6 +18,7 @@ import com.google.inject.TypeLiteral; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; @@ -57,7 +58,8 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), - new TypeDeserializerModule(context.getTypeManager()), + new TypeDeserializerModule(), + new ConnectorContextModule(catalogName, context), new RedisConnectorModule(), binder -> { if (tableDescriptionSupplier.isPresent()) { diff --git a/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftConnectorFactory.java b/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftConnectorFactory.java index 4d4aeba717a2..8640e6809cdc 100644 --- a/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftConnectorFactory.java +++ b/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftConnectorFactory.java @@ -15,17 +15,13 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; -import io.opentelemetry.api.OpenTelemetry; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.jdbc.ExtraCredentialsBasedIdentityCacheMappingModule; import io.trino.plugin.jdbc.JdbcModule; import io.trino.plugin.jdbc.credential.CredentialProviderModule; -import io.trino.spi.Node; -import io.trino.spi.VersionEmbedder; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import io.trino.spi.type.TypeManager; import java.util.Map; @@ -49,11 +45,7 @@ public Connector create(String catalogName, Map requiredConfig, Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - binder -> binder.bind(Node.class).toInstance(context.getCurrentNode()), - binder -> binder.bind(TypeManager.class).toInstance(context.getTypeManager()), - binder -> binder.bind(VersionEmbedder.class).toInstance(context.getVersionEmbedder()), - binder -> binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()), - binder -> binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)), + new ConnectorContextModule(catalogName, context), new JdbcModule(), new CredentialProviderModule(), new ExtraCredentialsBasedIdentityCacheMappingModule(), diff --git a/plugin/trino-thrift/src/main/java/io/trino/plugin/thrift/ThriftConnectorFactory.java b/plugin/trino-thrift/src/main/java/io/trino/plugin/thrift/ThriftConnectorFactory.java index 2f3e4c227667..95dc712afc33 100644 --- a/plugin/trino-thrift/src/main/java/io/trino/plugin/thrift/ThriftConnectorFactory.java +++ b/plugin/trino-thrift/src/main/java/io/trino/plugin/thrift/ThriftConnectorFactory.java @@ -17,13 +17,12 @@ import com.google.inject.Module; import io.airlift.bootstrap.Bootstrap; import io.airlift.drift.transport.netty.client.DriftNettyClientModule; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; import io.trino.plugin.base.jmx.MBeanServerModule; -import io.trino.spi.catalog.CatalogName; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import io.trino.spi.type.TypeManager; import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -60,10 +59,7 @@ public Connector create(String catalogName, Map config, Connecto new MBeanServerModule(), new ConnectorObjectNameGeneratorModule("io.trino.plugin.thrift", "trino.plugin.thrift"), new DriftNettyClientModule(), - binder -> { - binder.bind(TypeManager.class).toInstance(context.getTypeManager()); - binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); - }, + new ConnectorContextModule(catalogName, context), locationModule, new ThriftModule()); diff --git a/plugin/trino-tpch/src/main/java/io/trino/plugin/tpch/TpchConnectorFactory.java b/plugin/trino-tpch/src/main/java/io/trino/plugin/tpch/TpchConnectorFactory.java index 15fe4f0b90c8..daf3dc4d3104 100644 --- a/plugin/trino-tpch/src/main/java/io/trino/plugin/tpch/TpchConnectorFactory.java +++ b/plugin/trino-tpch/src/main/java/io/trino/plugin/tpch/TpchConnectorFactory.java @@ -16,7 +16,7 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; -import io.opentelemetry.api.OpenTelemetry; +import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; @@ -62,7 +62,7 @@ public Connector create(String catalogName, Map properties, Conn Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - binder -> binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()), + new ConnectorContextModule(catalogName, context), new MBeanModule(), new JsonModule(), new TpchModule(context.getNodeManager(), defaultSplitsPerNode, predicatePushdownEnabled),