diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/InternalHiveConnectorFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/InternalHiveConnectorFactory.java index b954aaea043b..48efa8c36a9b 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/InternalHiveConnectorFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/InternalHiveConnectorFactory.java @@ -25,6 +25,7 @@ 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.hdfs.HdfsModule; import io.trino.hdfs.authentication.HdfsAuthenticationModule; @@ -86,7 +87,7 @@ private InternalHiveConnectorFactory() {} public static Connector createConnector(String catalogName, Map config, ConnectorContext context, Module module) { - return createConnector(catalogName, config, context, module, Optional.empty(), Optional.empty()); + return createConnector(catalogName, config, context, module, Optional.empty(), Optional.empty(), Optional.empty()); } public static Connector createConnector( @@ -95,6 +96,7 @@ public static Connector createConnector( ConnectorContext context, Module module, Optional metastore, + Optional fileSystemFactory, Optional directoryLister) { requireNonNull(config, "config is null"); @@ -119,7 +121,9 @@ public static Connector createConnector( new HiveMetastoreModule(metastore), new HiveSecurityModule(), new HdfsAuthenticationModule(), - new FileSystemModule(), + fileSystemFactory + .map(factory -> (Module) binder -> binder.bind(TrinoFileSystemFactory.class).toInstance(factory)) + .orElseGet(FileSystemModule::new), new HiveProcedureModule(), new MBeanServerModule(), binder -> { diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestingHiveConnectorFactory.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestingHiveConnectorFactory.java index 9974fd40b682..f353248f6df1 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestingHiveConnectorFactory.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestingHiveConnectorFactory.java @@ -55,6 +55,6 @@ public String getName() @Override public Connector create(String catalogName, Map config, ConnectorContext context) { - return createConnector(catalogName, config, context, module, metastore, directoryLister); + return createConnector(catalogName, config, context, module, metastore, Optional.empty(), directoryLister); } } 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 44a5e747c0b4..98d1a49cc3e2 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 @@ -44,8 +44,8 @@ public Connector create(String catalogName, Map config, Connecto ClassLoader classLoader = context.duplicatePluginClassLoader(); try { return (Connector) classLoader.loadClass(InternalHudiConnectorFactory.class.getName()) - .getMethod("createConnector", String.class, Map.class, ConnectorContext.class, Optional.class) - .invoke(null, catalogName, config, context, Optional.empty()); + .getMethod("createConnector", String.class, Map.class, ConnectorContext.class, Optional.class, Optional.class) + .invoke(null, catalogName, config, context, Optional.empty(), Optional.empty()); } catch (InvocationTargetException e) { Throwable targetException = e.getTargetException(); diff --git a/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/InternalHudiConnectorFactory.java b/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/InternalHudiConnectorFactory.java index a3f5672cf1d7..c8ea38715ca6 100644 --- a/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/InternalHudiConnectorFactory.java +++ b/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/InternalHudiConnectorFactory.java @@ -16,6 +16,7 @@ import com.google.common.collect.ImmutableSet; import com.google.inject.Injector; import com.google.inject.Key; +import com.google.inject.Module; import com.google.inject.TypeLiteral; import io.airlift.bootstrap.Bootstrap; import io.airlift.bootstrap.LifeCycleManager; @@ -23,6 +24,7 @@ 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.hdfs.HdfsModule; import io.trino.hdfs.authentication.HdfsAuthenticationModule; @@ -59,7 +61,8 @@ public static Connector createConnector( String catalogName, Map config, ConnectorContext context, - Optional metastore) + Optional metastore, + Optional fileSystemFactory) { ClassLoader classLoader = InternalHudiConnectorFactory.class.getClassLoader(); try (ThreadContextClassLoader ignored = new ThreadContextClassLoader(classLoader)) { @@ -73,7 +76,9 @@ public static Connector createConnector( new HiveGcsModule(), new HiveAzureModule(), new HdfsAuthenticationModule(), - new FileSystemModule(), + fileSystemFactory + .map(factory -> (Module) binder -> binder.bind(TrinoFileSystemFactory.class).toInstance(factory)) + .orElseGet(FileSystemModule::new), new MBeanServerModule(), binder -> { binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); diff --git a/plugin/trino-hudi/src/test/java/io/trino/plugin/hudi/TestingHudiConnectorFactory.java b/plugin/trino-hudi/src/test/java/io/trino/plugin/hudi/TestingHudiConnectorFactory.java index 6009f199ad03..d221ada7e851 100644 --- a/plugin/trino-hudi/src/test/java/io/trino/plugin/hudi/TestingHudiConnectorFactory.java +++ b/plugin/trino-hudi/src/test/java/io/trino/plugin/hudi/TestingHudiConnectorFactory.java @@ -43,6 +43,6 @@ public String getName() @Override public Connector create(String catalogName, Map config, ConnectorContext context) { - return createConnector(catalogName, config, context, metastore); + return createConnector(catalogName, config, context, metastore, Optional.empty()); } }