This is an automated email from the ASF dual-hosted git repository.

junhao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/paimon-trino.git


The following commit(s) were added to refs/heads/main by this push:
     new b58d423  Fix error of high version of trino can't find some method. 
(#71)
b58d423 is described below

commit b58d423b02f193e8dbcd9deec06bf66bad84ab12
Author: YeJunHao <[email protected]>
AuthorDate: Mon Apr 29 17:56:27 2024 +0800

    Fix error of high version of trino can't find some method. (#71)
    
    
    Co-authored-by: yejunhao <[email protected]>
---
 .../trino/InternalPaimonConnectorFactory.java      | 114 ---------------------
 .../apache/paimon/trino/TrinoConnectorFactory.java | 105 ++++++++++++-------
 .../paimon/trino/TrinoPageSourceProvider.java      |   9 +-
 3 files changed, 75 insertions(+), 153 deletions(-)

diff --git 
a/paimon-trino-common/src/main/java/org/apache/paimon/trino/InternalPaimonConnectorFactory.java
 
b/paimon-trino-common/src/main/java/org/apache/paimon/trino/InternalPaimonConnectorFactory.java
deleted file mode 100644
index 56232f0..0000000
--- 
a/paimon-trino-common/src/main/java/org/apache/paimon/trino/InternalPaimonConnectorFactory.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- *
- *  * Licensed to the Apache Software Foundation (ASF) under one
- *  * or more contributor license agreements.  See the NOTICE file
- *  * distributed with this work for additional information
- *  * regarding copyright ownership.  The ASF licenses this file
- *  * to you 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 org.apache.paimon.trino;
-
-import com.google.inject.Injector;
-import com.google.inject.Module;
-import io.airlift.bootstrap.Bootstrap;
-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;
-import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorMetadata;
-import 
io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider;
-import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager;
-import io.trino.plugin.hive.NodeVersion;
-import io.trino.plugin.hive.orc.OrcReaderConfig;
-import io.trino.spi.classloader.ThreadContextClassLoader;
-import io.trino.spi.connector.Connector;
-import io.trino.spi.connector.ConnectorContext;
-import io.trino.spi.type.TypeManager;
-
-import java.util.Map;
-import java.util.Optional;
-
-/** Internal factory to create connector. */
-public class InternalPaimonConnectorFactory {
-
-    private InternalPaimonConnectorFactory() {}
-
-    public static Connector createConnector(
-            Map<String, String> config,
-            ConnectorContext context,
-            Optional<TrinoFileSystemFactory> fileSystemFactory,
-            Module module) {
-        ClassLoader classLoader = 
InternalPaimonConnectorFactory.class.getClassLoader();
-        try (ThreadContextClassLoader ignored = new 
ThreadContextClassLoader(classLoader)) {
-            Bootstrap app =
-                    new Bootstrap(
-                            new JsonModule(),
-                            new TrinoModule(config),
-                            new HdfsModule(),
-                            new HdfsAuthenticationModule(),
-                            // bind the trino file system module
-                            fileSystemFactory
-                                    .map(
-                                            factory ->
-                                                    (Module)
-                                                            binder ->
-                                                                    
binder.bind(
-                                                                               
     TrinoFileSystemFactory
-                                                                               
             .class)
-                                                                            
.toInstance(factory))
-                                    .orElseGet(FileSystemModule::new),
-                            binder -> {
-                                binder.bind(NodeVersion.class)
-                                        .toInstance(
-                                                new NodeVersion(
-                                                        
context.getNodeManager()
-                                                                
.getCurrentNode()
-                                                                
.getVersion()));
-                                
binder.bind(TypeManager.class).toInstance(context.getTypeManager());
-                                binder.bind(OpenTelemetry.class)
-                                        
.toInstance(context.getOpenTelemetry());
-                                
binder.bind(Tracer.class).toInstance(context.getTracer());
-                                binder.bind(OrcReaderConfig.class)
-                                        .toInstance(new OrcReaderConfig());
-                            },
-                            module);
-
-            Injector injector =
-                    app.doNotInitializeLogging()
-                            .setRequiredConfigurationProperties(Map.of())
-                            .setOptionalConfigurationProperties(config)
-                            .initialize();
-
-            TrinoMetadata trinoMetadata = 
injector.getInstance(TrinoMetadataFactory.class).create();
-            TrinoSplitManager trinoSplitManager = 
injector.getInstance(TrinoSplitManager.class);
-            TrinoPageSourceProvider trinoPageSourceProvider =
-                    injector.getInstance(TrinoPageSourceProvider.class);
-            TrinoSessionProperties trinoSessionProperties =
-                    injector.getInstance(TrinoSessionProperties.class);
-            TrinoTableOptions trinoTableOptions = 
injector.getInstance(TrinoTableOptions.class);
-
-            return new TrinoConnector(
-                    new ClassLoaderSafeConnectorMetadata(trinoMetadata, 
classLoader),
-                    new 
ClassLoaderSafeConnectorSplitManager(trinoSplitManager, classLoader),
-                    new ClassLoaderSafeConnectorPageSourceProvider(
-                            trinoPageSourceProvider, classLoader),
-                    trinoTableOptions,
-                    trinoSessionProperties);
-        }
-    }
-}
diff --git 
a/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoConnectorFactory.java
 
b/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoConnectorFactory.java
index 773e573..3ccf70f 100644
--- 
a/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoConnectorFactory.java
+++ 
b/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoConnectorFactory.java
@@ -19,30 +19,31 @@
 package org.apache.paimon.trino;
 
 import com.google.inject.Binder;
+import com.google.inject.Injector;
 import com.google.inject.Module;
+import io.airlift.bootstrap.Bootstrap;
+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.hdfs.HdfsModule;
+import io.trino.hdfs.authentication.HdfsAuthenticationModule;
+import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorMetadata;
+import 
io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider;
+import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager;
+import io.trino.plugin.hive.NodeVersion;
+import io.trino.plugin.hive.orc.OrcReaderConfig;
+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 java.lang.reflect.InvocationTargetException;
 import java.util.Map;
-import java.util.Optional;
-
-import static 
org.apache.paimon.shade.guava30.com.google.common.base.Throwables.throwIfUnchecked;
 
 /** Trino {@link ConnectorFactory}. */
 public class TrinoConnectorFactory implements ConnectorFactory {
 
-    private final Class<? extends Module> module;
-
-    public TrinoConnectorFactory() {
-        this(EmptyModule.class);
-    }
-
-    public TrinoConnectorFactory(Class<? extends Module> module) {
-        this.module = module;
-    }
-
     @Override
     public String getName() {
         return "paimon";
@@ -51,27 +52,61 @@ public class TrinoConnectorFactory implements 
ConnectorFactory {
     @Override
     public Connector create(
             String catalogName, Map<String, String> config, ConnectorContext 
context) {
-        ClassLoader classLoader = context.duplicatePluginClassLoader();
-        try {
-            Class<?> moduleClass = 
classLoader.loadClass(Module.class.getName());
-            Object moduleInstance =
-                    
classLoader.loadClass(module.getName()).getConstructor().newInstance();
-            return (Connector)
-                    classLoader
-                            
.loadClass(InternalPaimonConnectorFactory.class.getName())
-                            .getMethod(
-                                    "createConnector",
-                                    Map.class,
-                                    ConnectorContext.class,
-                                    Optional.class,
-                                    moduleClass)
-                            .invoke(null, config, context, Optional.empty(), 
moduleInstance);
-        } catch (InvocationTargetException e) {
-            Throwable targetException = e.getTargetException();
-            throwIfUnchecked(targetException);
-            throw new RuntimeException(targetException);
-        } catch (ReflectiveOperationException e) {
-            throw new RuntimeException(e);
+        return create(catalogName, config, context, new EmptyModule());
+    }
+
+    public Connector create(
+            String catalogName,
+            Map<String, String> config,
+            ConnectorContext context,
+            Module module) {
+        ClassLoader classLoader = TrinoConnectorFactory.class.getClassLoader();
+        try (ThreadContextClassLoader ignored = new 
ThreadContextClassLoader(classLoader)) {
+            Bootstrap app =
+                    new Bootstrap(
+                            new JsonModule(),
+                            new TrinoModule(config),
+                            new HdfsModule(),
+                            new HdfsAuthenticationModule(),
+                            // bind the trino file system module
+                            new FileSystemModule(),
+                            binder -> {
+                                binder.bind(NodeVersion.class)
+                                        .toInstance(
+                                                new NodeVersion(
+                                                        
context.getNodeManager()
+                                                                
.getCurrentNode()
+                                                                
.getVersion()));
+                                
binder.bind(TypeManager.class).toInstance(context.getTypeManager());
+                                binder.bind(OpenTelemetry.class)
+                                        
.toInstance(context.getOpenTelemetry());
+                                
binder.bind(Tracer.class).toInstance(context.getTracer());
+                                binder.bind(OrcReaderConfig.class)
+                                        .toInstance(new OrcReaderConfig());
+                            },
+                            module);
+
+            Injector injector =
+                    app.doNotInitializeLogging()
+                            .setRequiredConfigurationProperties(Map.of())
+                            .setOptionalConfigurationProperties(config)
+                            .initialize();
+
+            TrinoMetadata trinoMetadata = 
injector.getInstance(TrinoMetadataFactory.class).create();
+            TrinoSplitManager trinoSplitManager = 
injector.getInstance(TrinoSplitManager.class);
+            TrinoPageSourceProvider trinoPageSourceProvider =
+                    injector.getInstance(TrinoPageSourceProvider.class);
+            TrinoSessionProperties trinoSessionProperties =
+                    injector.getInstance(TrinoSessionProperties.class);
+            TrinoTableOptions trinoTableOptions = 
injector.getInstance(TrinoTableOptions.class);
+
+            return new TrinoConnector(
+                    new ClassLoaderSafeConnectorMetadata(trinoMetadata, 
classLoader),
+                    new 
ClassLoaderSafeConnectorSplitManager(trinoSplitManager, classLoader),
+                    new ClassLoaderSafeConnectorPageSourceProvider(
+                            trinoPageSourceProvider, classLoader),
+                    trinoTableOptions,
+                    trinoSessionProperties);
         }
     }
 
diff --git 
a/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoPageSourceProvider.java
 
b/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoPageSourceProvider.java
index 7917588..a380e42 100644
--- 
a/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoPageSourceProvider.java
+++ 
b/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoPageSourceProvider.java
@@ -138,13 +138,14 @@ public class TrinoPageSourceProvider implements 
ConnectorPageSourceProvider {
             Split paimonSplit = split.decodeSplit();
             Optional<List<RawFile>> optionalRawFiles = 
paimonSplit.convertToRawFiles();
             if (checkRawFile(optionalRawFiles)) {
-                Optional<List<DeletionFile>> deletionFiles = 
paimonSplit.deletionFiles();
-                Optional<List<IndexFile>> indexFiles = 
paimonSplit.indexFiles();
-
                 FileStoreTable fileStoreTable = (FileStoreTable) table;
+                boolean readIndex = 
fileStoreTable.coreOptions().fileIndexReadEnabled();
+
+                Optional<List<DeletionFile>> deletionFiles = 
paimonSplit.deletionFiles();
+                Optional<List<IndexFile>> indexFiles =
+                        readIndex ? paimonSplit.indexFiles() : 
Optional.empty();
                 SchemaManager schemaManager =
                         new SchemaManager(fileStoreTable.fileIO(), 
fileStoreTable.location());
-
                 List<Type> type =
                         columns.stream()
                                 .map(s -> ((TrinoColumnHandle) 
s).getTrinoType())

Reply via email to