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())