This is an automated email from the ASF dual-hosted git repository. diqiu50 pushed a commit to branch revert-12733-cherry-pick-14f359fe-to-branch-1.3 in repository https://gitbox.apache.org/repos/asf/gravitino.git
commit eee6d976e9796588728014fc2dbdbe54fa2c7265 Author: Yuhui <[email protected]> AuthorDate: Wed Sep 2 09:53:08 2026 +0800 Revert "[Cherry-pick to branch-1.3] [#12707] improvement(trino-connector): Dr…" This reverts commit 377a1982c0c856dd4e814f9f49fcccf277f5be8c. --- .github/workflows/trino-multi-version-test.yml | 6 + agent-skills/trino-test/trino-test-guide.md | 3 +- build.gradle.kts | 1 + docs/how-to-test.md | 2 + docs/trino-connector/configuration.md | 4 +- docs/trino-connector/development.md | 5 +- docs/trino-connector/installation.md | 1 + docs/trino-connector/requirements.md | 2 +- gradle.properties | 2 +- settings.gradle.kts | 1 + trino-connector/integration-test/build.gradle.kts | 1 + .../integration/test/TrinoQueryTestTool.java | 7 +- .../trino-test-tools/run_test_with_versions.sh | 92 ++++++++++++ .../trino-cascading-env/docker-compose.yaml | 4 +- .../trino-connector-435-439/build.gradle.kts | 163 +++++++++++++++++++++ .../trino/connector/GravitinoConnector435.java | 55 +++++++ .../connector/GravitinoConnectorFactory435.java | 52 +++++++ .../trino/connector/GravitinoMetadata435.java | 120 +++++++++++++++ .../GravitinoNodePartitioningProvider435.java | 30 ++++ .../trino/connector/GravitinoPlugin435.java | 38 +++++ .../trino/connector/GravitinoSplitManager435.java | 66 +++++++++ .../connector/GravitinoSystemConnector435.java | 87 +++++++++++ .../META-INF/services/io.trino.spi.Plugin | 19 +++ .../src/test/java/TestGravitinoConnector435.java | 59 ++++++++ trino-connector/trino-connector/build.gradle.kts | 14 -- .../gravitino/trino/connector/GravitinoConfig.java | 2 +- .../trino/connector/GravitinoConnectorFactory.java | 2 +- 27 files changed, 809 insertions(+), 29 deletions(-) diff --git a/.github/workflows/trino-multi-version-test.yml b/.github/workflows/trino-multi-version-test.yml index 6cf4484f07..a509d4e185 100644 --- a/.github/workflows/trino-multi-version-test.yml +++ b/.github/workflows/trino-multi-version-test.yml @@ -79,6 +79,12 @@ jobs: --auto=all --auto_patch --trino_version=440 \ --trino_connector_dir=${{ env.CONNECTOR_DIR }}/trino-connector-440-445/build/libs + - name: Test Trino 435 + run: | + trino-connector/integration-test/trino-test-tools/trino_integration_test.sh \ + --auto=all --auto_patch --trino_version=435 \ + --trino_connector_dir=${{ env.CONNECTOR_DIR }}/trino-connector-435-439/build/libs + - name: Upload test reports uses: actions/upload-artifact@v7 if: failure() diff --git a/agent-skills/trino-test/trino-test-guide.md b/agent-skills/trino-test/trino-test-guide.md index 2cf74b156d..fa4a08cc38 100644 --- a/agent-skills/trino-test/trino-test-guide.md +++ b/agent-skills/trino-test/trino-test-guide.md @@ -43,7 +43,8 @@ trino-connector/integration-test/ │ ├── tpch/ # TPC-H test set │ └── tpcds/ # TPC-DS test set └── trino-test-tools/ # Test scripts - └── trino_integration_test.sh # Main test script + ├── trino_integration_test.sh # Main test script + └── run_test_with_versions.sh # Multi-version test script ``` ### 1.1 Running Tests with Scripts (Recommended) diff --git a/build.gradle.kts b/build.gradle.kts index 846ffc58d3..ae26a4df48 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1025,6 +1025,7 @@ tasks { val assembleDistribution by registering(Tar::class) { dependsOn( compileDistribution, + ":trino-connector:trino-connector-435-439:assembleTrinoConnector", ":trino-connector:trino-connector-440-445:assembleTrinoConnector", ":trino-connector:trino-connector-446-451:assembleTrinoConnector", ":trino-connector:trino-connector-452-468:assembleTrinoConnector", diff --git a/docs/how-to-test.md b/docs/how-to-test.md index 373a510e06..d9c6416b83 100644 --- a/docs/how-to-test.md +++ b/docs/how-to-test.md @@ -70,6 +70,8 @@ To deploy the Gravitino server locally to run the integration tests, follow thes Specify the `--trino_worker_num` parameter to make the Trino test sets run in a distributed environment. Specify the `--trino_version` parameter to make the Trino test sets run with specific trino version. Specify the `--trino_connector_dir` parameter to run Trino tests using the JAR files located in the `gravitino-trino-connector` plugin directory. + Alternatively, use `bash trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh` command to execute + tests across different Trino versions. ## Skip Tests diff --git a/docs/trino-connector/configuration.md b/docs/trino-connector/configuration.md index ec5f42011a..5bcb98636e 100644 --- a/docs/trino-connector/configuration.md +++ b/docs/trino-connector/configuration.md @@ -25,7 +25,7 @@ license: "This software is licensed under the Apache License version 2." | trino.jdbc.roles | string | (none) | Session roles applied to the internal JDBC connection, for example `system:sysadmin`. Required by deployments that only allow `CREATE CATALOG` with a privileged role. | No | | trino.jdbc.properties. | string | (none) | The configuration key prefix for raw Trino JDBC driver properties, see [Connecting to a TLS-enabled coordinator](#connecting-to-a-tls-enabled-coordinator). | No | | gravitino.metadata.refresh-interval-seconds | integer | 10 | The `gravitino.metadata.refresh-interval-seconds` defines the interval in seconds to refresh metadata from Gravitino server, the default value is 10 seconds. | No | -| gravitino.trino.skip-version-validation | boolean | false | The `gravitino.trino.skip-version-validation` defines whether to skip Trino version validation. Gravitino supports Trino versions between 440 and 478. If this option is `true`, unsupported Trino versions can still be used, but compatibility is not guaranteed. | No | +| gravitino.trino.skip-version-validation | boolean | false | The `gravitino.trino.skip-version-validation` defines whether to skip Trino version validation. Gravitino supports Trino versions between 435 and 478. If this option is `true`, unsupported Trino versions can still be used, but compatibility is not guaranteed. | No | | gravitino.client. | string | (none) | The configuration key prefix for the Gravitino client config. | No | | gravitino.trino.skip-catalog-patterns | string | (none) | The `gravitino.trino.skip-catalog-patterns` defines a comma-separated list of catalog name regex patterns that should be excluded from loading. For example, `test_.*, .*_tmp` excludes all catalogs starting with `test_` or ending with `_tmp`. | No | | gravitino.use-single-metalake | boolean | true | If `true`, only one metalake is used and catalogs are identified by `<catalog_name>`. If `false`, multi-metalake mode is enabled and catalogs are identified by `<metalake_name>.<catalog_name>`. | No | @@ -34,7 +34,7 @@ To configure the Gravitino client, use properties prefixed with `gravitino.clien **Note:** Invalid configuration properties will result in exceptions. Please see [Gravitino Java client configurations](../how-to-use-gravitino-client.md#java-client-configuration) for more support client configuration. -Multi-metalake mode (`gravitino.use-single-metalake=false`) is supported on Trino connector versions 440-445 and 469-478. On versions 446-468, a warning is logged and the connector initializes, but the mode is not fully supported and some operations may fail. +Multi-metalake mode (`gravitino.use-single-metalake=false`) is supported on Trino connector versions 435-445 and 469-478. On versions 446-468, a warning is logged and the connector initializes, but the mode is not fully supported and some operations may fail. ## Connecting to a TLS-enabled coordinator diff --git a/docs/trino-connector/development.md b/docs/trino-connector/development.md index a80ee05ad4..cd2b54aa47 100644 --- a/docs/trino-connector/development.md +++ b/docs/trino-connector/development.md @@ -17,6 +17,8 @@ The Gravitino Trino connector supports multiple Trino versions (see [Requirement trino-connector/ ├── trino-connector/ # Shared base source code │ └── src/main/java/ # Common implementation used by all versions +├── trino-connector-435-439/ # Version-specific adapters for Trino 435-439 +│ └── src/main/java/ ├── trino-connector-440-445/ # Version-specific adapters for Trino 440-445 │ └── src/main/java/ ├── trino-connector-446-451/ # Version-specific adapters for Trino 446-451 @@ -69,6 +71,7 @@ Change `localhost`, `port`, and the names of metalake and catalogs to match your | Trino Version | Version-Segment Module | |---------------|---------------------------| + | 435-439 | `trino-connector-435-439` | | 440-445 | `trino-connector-440-445` | | 446-451 | `trino-connector-446-451` | | 452-468 | `trino-connector-452-468` | @@ -309,7 +312,7 @@ If a compile error occurs due to `The following artifacts could not be resolved: ``` :::note - Remove `/etc/catalogs/xxx.properties` if the corresponding `plugin/trino-xxx/pom.xml` is not listed in `plugin.bundles`. For the Hive plugin, use `plugin/trino-hive/pom.xml`. + Remove `/etc/catalogs/xxx.properties` if the corresponding `plugin/trino-xxx/pom.xml` is not listed in `plugin.bundles`. For the Hive plugin, use `plugin/trino-hive/pom.xml` for Trino 435 and later; for earlier versions, use `plugin/trino-hive-hadoop2/pom.xml`. ::: 8. Start the Trino server and connect to the Gravitino server. diff --git a/docs/trino-connector/installation.md b/docs/trino-connector/installation.md index 1bf0568086..9543261510 100644 --- a/docs/trino-connector/installation.md +++ b/docs/trino-connector/installation.md @@ -19,6 +19,7 @@ Choose the package by your Trino server version first. | Trino server version | Connector package segment | |----------------------|---------------------------| +| 435-439 | `trino-connector-435-439` | | 440-445 | `trino-connector-440-445` | | 446-451 | `trino-connector-446-451` | | 452-468 | `trino-connector-452-468` | diff --git a/docs/trino-connector/requirements.md b/docs/trino-connector/requirements.md index 9224e327d1..0c5bb61da4 100644 --- a/docs/trino-connector/requirements.md +++ b/docs/trino-connector/requirements.md @@ -9,7 +9,7 @@ license: "This software is licensed under the Apache License version 2." To install and deploy the Apache Gravitino Trino connector, the following environmental setup is necessary: -- Trino server version should be between Trino-server-440 and Trino-server-478. +- Trino server version should be between Trino-server-435 and Trino-server-478. The examples in this document use Trino `469` by default. - If you use an unsupported Trino version, you can set `gravitino.trino.skip-version-validation` to `true`. Unsupported versions have not undergone thorough testing. diff --git a/gradle.properties b/gradle.properties index 05f7d7d451..4c1ad7e606 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,4 +48,4 @@ skipDockerTests = true enableFuse = false # The minimum supported Trino version. -minSupportedTrinoVersion= 440 +minSupportedTrinoVersion= 435 diff --git a/settings.gradle.kts b/settings.gradle.kts index d10537e9a2..e49a0e4d11 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -75,6 +75,7 @@ val skipTrinoConnector: Boolean = if (!skipTrinoConnector) { include( "trino-connector:trino-connector", + "trino-connector:trino-connector-435-439", "trino-connector:trino-connector-440-445", "trino-connector:trino-connector-446-451", "trino-connector:trino-connector-452-468", diff --git a/trino-connector/integration-test/build.gradle.kts b/trino-connector/integration-test/build.gradle.kts index bd39ae2c2e..f66c9e3649 100644 --- a/trino-connector/integration-test/build.gradle.kts +++ b/trino-connector/integration-test/build.gradle.kts @@ -82,6 +82,7 @@ dependencies { } tasks.register("setupDependencies") { + dependsOn(":trino-connector:trino-connector-435-439:copyLibs") dependsOn(":trino-connector:trino-connector-440-445:copyLibs") dependsOn(":trino-connector:trino-connector-446-451:copyLibs") dependsOn(":trino-connector:trino-connector-452-468:copyLibs") diff --git a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java index 32f8d3d79d..e97843c5df 100644 --- a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java +++ b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java @@ -99,10 +99,7 @@ public class TrinoQueryTestTool { + "otherwise fall back to a single-node setup with combined coordinator-worker roles."); options.addOption( - "trino_version", - true, - "Specify the Trino version to test. If not specified, the version pinned in the test " - + "docker-compose file is used."); + "trino_version", true, "Specify the Trino version to test, the default value is 435."); options.addOption( "trino_connector_dir", @@ -131,7 +128,7 @@ public class TrinoQueryTestTool { + "Run all the testers in the 'testsets' directory with a distributed cluster:\n" + "TrinoTestTool --auto=all --trino_worker_num=3\n\n" + "Run all the testers in the 'testsets' directory with specific trino version:\n" - + "TrinoTestTool --auto=all --trino_version=440\n\n" + + "TrinoTestTool --auto=all --trino_version=435\n\n" + "Run all the testers in the 'testsets' directory with specific trino connector JAR files:\n" + "TrinoTestTool --auto=all --trino_connector_dir=./trino-connector/libs\n\n" + "Run all the tpch testset's testers in the 'testsets/tpch' directory:\n" diff --git a/trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh b/trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh new file mode 100755 index 0000000000..2dd6359acb --- /dev/null +++ b/trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh @@ -0,0 +1,92 @@ +#!/bin/bash +# +# 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. + +# This script is used to execute tests for the Trino connector across different Trino versions. +# It wraps the `trino_test.sh` script and iterates through a configured map of Trino versions +# to connector modules. +# +# Arguments: +# --trino_versions_map: Space-separated list of "version:module" pairs. +# Defaults to "435:trino-connector" if not provided. +# --trino_test_args: Arguments passed directly to the underlying test script. +# +# Example: +# ./run_test_with_versions.sh \ +# --trino_versions_map="435:trino-connector 478:trino-connector-470-478" \ +# --trino_test_args="--auto=all" +# +# This configuration will run tests for: +# - Trino 435 using the connector in 'trino-connector' directory +# - Trino 478 using the connector in 'trino-connector-470-478' directory +# And pass "--auto=all" to the underlying test script for each version. + +cd "$(dirname "$0")" + +# Set the Gravitino server directories +GRAVITINO_HOME_DIR=../../../ +GRAVITINO_HOME_DIR=`realpath $GRAVITINO_HOME_DIR` + +# Parse arguments +trino_versions_map="" +trino_test_args="" + +while [[ $# -gt 0 ]]; do + case $1 in + --trino_versions_map=*) + trino_versions_map="${1#*=}" + shift + ;; + --trino_test_args=*) + trino_test_args="${1#*=}" + shift + ;; + *) + echo "Unknown argument: $1" + exit 1 + ;; + esac +done + +if [ -z "$trino_versions_map" ]; then + trino_versions_map="435:trino-connector" +fi + +for entry in $trino_versions_map; do + trino_version=${entry%%:*} + trino_module_name=${entry##*:} + + trino_connector_dir="$GRAVITINO_HOME_DIR/trino-connector/$trino_module_name/build/libs" + + # Combine test arguments with version-specific arguments + args="$trino_test_args --trino_version=${trino_version} --trino_connector_dir=${trino_connector_dir}" + + # execute test + echo "Running test for Trino version: $trino_version with connector: $trino_module_name" + echo "The args: $args" + + sleep 5 + $GRAVITINO_HOME_DIR/trino-connector/integration-test/trino-test-tools/trino_integration_test.sh $args + + if [ $? -ne 0 ]; then + echo "Test failed for Trino version $trino_version" + exit 1 + fi +done + +echo "Test success" diff --git a/trino-connector/integration-test/trino-test-tools/trino-cascading-env/docker-compose.yaml b/trino-connector/integration-test/trino-test-tools/trino-cascading-env/docker-compose.yaml index 38e9f40861..54091d4d62 100644 --- a/trino-connector/integration-test/trino-test-tools/trino-cascading-env/docker-compose.yaml +++ b/trino-connector/integration-test/trino-test-tools/trino-cascading-env/docker-compose.yaml @@ -79,7 +79,7 @@ services: start_period: 30s trino-remote: - image: trinodb/trino:440 + image: trinodb/trino:435 networks: - trino-net container_name: trino-ci-trino-remote @@ -110,7 +110,7 @@ services: condition: service_healthy trino-local: - image: trinodb/trino:440 + image: trinodb/trino:435 networks: - trino-net container_name: trino-ci-trino-local diff --git a/trino-connector/trino-connector-435-439/build.gradle.kts b/trino-connector/trino-connector-435-439/build.gradle.kts new file mode 100644 index 0000000000..a3864ffec9 --- /dev/null +++ b/trino-connector/trino-connector-435-439/build.gradle.kts @@ -0,0 +1,163 @@ +/* + * 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. + */ + +import com.diffplug.gradle.spotless.SpotlessExtension +import net.ltgt.gradle.errorprone.errorprone +import org.gradle.internal.hash.ChecksumService +import org.gradle.kotlin.dsl.support.serviceOf + +plugins { + `java-library` + `maven-publish` +} + +// This module supports Trino versions 435-439 +val minTrinoVersion = 435 +val maxTrinoVersion = 439 + +val trinoVersion = providers.gradleProperty("trinoVersion") + .map { it.trim().toInt() } + .orElse(minTrinoVersion) + .get() + +// Validate version range +check(trinoVersion in minTrinoVersion..maxTrinoVersion) { + "Module ${project.path} supports Trino versions $minTrinoVersion-$maxTrinoVersion, " + + "but trinoVersion=$trinoVersion was specified. " + + "Please set '-PtrinoVersion=$minTrinoVersion' (or any version in the supported range)." +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(24)) +} + +dependencies { + implementation(project(":catalogs:catalog-common")) + implementation(project(":clients:client-java-runtime", configuration = "shadow")) + implementation(libs.airlift.json) + implementation(libs.airlift.log) + implementation(libs.slf4j.jdk14) + implementation(libs.commons.collections4) + implementation(libs.commons.lang3) + implementation("io.trino:trino-jdbc:$trinoVersion") + compileOnly(libs.airlift.resolver) + compileOnly("io.trino:trino-spi:$trinoVersion") { + exclude("org.apache.logging.log4j") + } + testImplementation(libs.awaitility) + testImplementation(libs.mockito.core) + testImplementation(libs.mysql.driver) + testImplementation("io.trino:trino-memory:$trinoVersion") { + exclude("org.antlr") + exclude("org.apache.logging.log4j") + } + testImplementation("io.trino:trino-testing:$trinoVersion") { + exclude("org.apache.logging.log4j") + } + testRuntimeOnly(libs.junit.jupiter.engine) +} + +sourceSets { + main { + java.srcDirs("../trino-connector/src/main/java") + } + test { + java.srcDirs("../trino-connector/src/test/java") + resources.srcDirs("../trino-connector/src/test/resources") + } +} + +plugins.withId("com.diffplug.spotless") { + configure<SpotlessExtension> { + java { + // Keep Spotless within this module to avoid cross-project target errors. + target(project.fileTree("src") { include("**/*.java") }) + } + } +} + +tasks.withType<JavaCompile>().configureEach { + // Error Prone is incompatible with the JDK 24 toolchain required by this Trino range. + options.errorprone.isEnabled.set(false) + options.release.set(17) +} + +tasks.withType<Test>().configureEach { + extensions + .findByType(org.gradle.testing.jacoco.plugins.JacocoTaskExtension::class.java) + ?.isEnabled = false +} + +tasks { + val copyRuntimeLibs by registering(Copy::class) { + dependsOn("jar") + from({ configurations.runtimeClasspath.get().filter(File::isFile) }) + into(layout.buildDirectory.dir("libs")) + } + + val distributionDir = rootProject.layout.projectDirectory.dir("distribution/${rootProject.name}-${project.name}") + + val copyLibs by registering(Copy::class) { + dependsOn(copyRuntimeLibs, "build") + from(layout.buildDirectory.dir("libs")) + from(rootProject.layout.projectDirectory.dir("licenses")) { + into("licenses") + } + from(rootProject.file("LICENSE.trino")) + from(rootProject.file("NOTICE.trino")) + from(rootProject.file("README.md")) + into(distributionDir) + rename { fileName -> + fileName.replace(".trino", "") + } + outputs.dir(distributionDir) + } + + val assembleTrinoConnector by registering(Tar::class) { + dependsOn(copyLibs) + group = "gravitino distribution" + finalizedBy("checksumTrinoConnector") + val archiveBase = "${rootProject.name}-${project.name}-$version" + into(archiveBase) + from(distributionDir) + compression = Compression.GZIP + archiveFileName.set("$archiveBase.tar.gz") + destinationDirectory.set(rootProject.layout.projectDirectory.dir("distribution")) + } + + val checksumTrinoConnector by registering { + group = "gravitino distribution" + dependsOn(assembleTrinoConnector) + val archiveFile = assembleTrinoConnector.flatMap { it.archiveFile } + val checksumFile = archiveFile.map { archive -> + archive.asFile.let { it.resolveSibling("${it.name}.sha256") } + } + inputs.file(archiveFile) + outputs.file(checksumFile) + doLast { + checksumFile.get().writeText( + serviceOf<ChecksumService>().sha256(archiveFile.get().asFile).toString() + ) + } + } + + named("build") { + finalizedBy(copyRuntimeLibs) + } +} diff --git a/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector435.java b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector435.java new file mode 100644 index 0000000000..9d6dc932d4 --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector435.java @@ -0,0 +1,55 @@ +/* + * 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.gravitino.trino.connector; + +import io.trino.spi.connector.ConnectorMetadata; +import io.trino.spi.connector.ConnectorNodePartitioningProvider; +import io.trino.spi.connector.ConnectorSplitManager; +import org.apache.gravitino.trino.connector.catalog.CatalogConnectorContext; +import org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadata; +import org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter; + +public class GravitinoConnector435 extends GravitinoConnector { + + public GravitinoConnector435(CatalogConnectorContext connectorContext) { + super(connectorContext); + } + + @Override + protected GravitinoMetadata createGravitinoMetadata( + CatalogConnectorMetadata catalogConnectorMetadata, + CatalogConnectorMetadataAdapter metadataAdapter, + ConnectorMetadata internalMetadata) { + return new GravitinoMetadata435(catalogConnectorMetadata, metadataAdapter, internalMetadata); + } + + @Override + public ConnectorSplitManager getSplitManager() { + ConnectorSplitManager splitManager = + catalogConnectorContext.getInternalConnector().getSplitManager(); + return new GravitinoSplitManager435(splitManager); + } + + @Override + public ConnectorNodePartitioningProvider getNodePartitioningProvider() { + ConnectorNodePartitioningProvider nodePartitioningProvider = + catalogConnectorContext.getInternalConnector().getNodePartitioningProvider(); + return new GravitinoNodePartitioningProvider435(nodePartitioningProvider); + } +} diff --git a/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory435.java b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory435.java new file mode 100644 index 0000000000..2ac78816ce --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory435.java @@ -0,0 +1,52 @@ +/* + * 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.gravitino.trino.connector; + +import org.apache.gravitino.client.GravitinoAdminClient; +import org.apache.gravitino.trino.connector.catalog.CatalogConnectorContext; +import org.apache.gravitino.trino.connector.system.GravitinoSystemConnector; +import org.apache.gravitino.trino.connector.system.storedprocedure.GravitinoStoredProcedureFactory; + +public class GravitinoConnectorFactory435 extends GravitinoConnectorFactory { + + public GravitinoConnectorFactory435(GravitinoAdminClient client) { + super(client); + } + + @Override + protected int getMinSupportTrinoSpiVersion() { + return 435; + } + + @Override + protected int getMaxSupportTrinoSpiVersion() { + return 439; + } + + @Override + protected GravitinoConnector createConnector(CatalogConnectorContext connectorContext) { + return new GravitinoConnector435(connectorContext); + } + + @Override + protected GravitinoSystemConnector createSystemConnector( + GravitinoStoredProcedureFactory storedProcedureFactory) { + return new GravitinoSystemConnector435(storedProcedureFactory); + } +} diff --git a/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata435.java b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata435.java new file mode 100644 index 0000000000..e6b8ff0db6 --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata435.java @@ -0,0 +1,120 @@ +/* + * 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.gravitino.trino.connector; + +import io.airlift.slice.Slice; +import io.trino.spi.connector.ColumnMetadata; +import io.trino.spi.connector.ConnectorInsertTableHandle; +import io.trino.spi.connector.ConnectorMergeTableHandle; +import io.trino.spi.connector.ConnectorOutputMetadata; +import io.trino.spi.connector.ConnectorOutputTableHandle; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorTableExecuteHandle; +import io.trino.spi.connector.ConnectorTableHandle; +import io.trino.spi.connector.RetryMode; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.statistics.ComputedStatistics; +import java.util.Collection; +import java.util.Map; +import java.util.Optional; +import org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadata; +import org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter; +import org.apache.gravitino.trino.connector.metadata.GravitinoColumn; + +public class GravitinoMetadata435 extends GravitinoMetadata { + + public GravitinoMetadata435( + CatalogConnectorMetadata catalogConnectorMetadata, + CatalogConnectorMetadataAdapter metadataAdapter, + io.trino.spi.connector.ConnectorMetadata internalMetadata) { + super(catalogConnectorMetadata, metadataAdapter, internalMetadata); + } + + @Override + public void addColumn( + ConnectorSession session, ConnectorTableHandle tableHandle, ColumnMetadata column) { + GravitinoColumn gravitinoColumn = metadataAdapter.createColumn(column); + catalogConnectorMetadata.addColumn(getTableName(tableHandle), gravitinoColumn); + } + + @Override + public Optional<ConnectorTableExecuteHandle> getTableHandleForExecute( + ConnectorSession session, + ConnectorTableHandle tableHandle, + String procedureName, + Map<String, Object> executeProperties, + RetryMode retryMode) { + return internalMetadata + .getTableHandleForExecute( + session, + GravitinoHandle.unWrap(tableHandle), + procedureName, + executeProperties, + retryMode) + .map(GravitinoTableExecuteHandle::new); + } + + @Override + public void executeTableExecute( + ConnectorSession session, ConnectorTableExecuteHandle tableExecuteHandle) { + internalMetadata.executeTableExecute(session, GravitinoHandle.unWrap(tableExecuteHandle)); + } + + @Override + public Optional<ConnectorOutputMetadata> finishInsert( + ConnectorSession session, + ConnectorInsertTableHandle insertHandle, + Collection<Slice> fragments, + Collection<ComputedStatistics> computedStatistics) { + return internalMetadata.finishInsert( + session, GravitinoHandle.unWrap(insertHandle), fragments, computedStatistics); + } + + @Override + public Optional<ConnectorOutputMetadata> finishCreateTable( + ConnectorSession session, + ConnectorOutputTableHandle tableHandle, + Collection<Slice> fragments, + Collection<ComputedStatistics> computedStatistics) { + ConnectorInsertTableHandle insertHandle = + ((GravitinoOutputTableHandle) tableHandle).getInternalHandle(); + return internalMetadata.finishInsert(session, insertHandle, fragments, computedStatistics); + } + + @Override + public ConnectorMergeTableHandle beginMerge( + ConnectorSession session, ConnectorTableHandle tableHandle, RetryMode retryMode) { + ConnectorMergeTableHandle connectorMergeTableHandle = + internalMetadata.beginMerge(session, GravitinoHandle.unWrap(tableHandle), retryMode); + SchemaTableName tableName = getTableName(tableHandle); + + return new GravitinoMergeTableHandle( + tableName.getSchemaName(), tableName.getTableName(), connectorMergeTableHandle); + } + + @Override + public void finishMerge( + ConnectorSession session, + ConnectorMergeTableHandle mergeTableHandle, + Collection<Slice> fragments, + Collection<ComputedStatistics> computedStatistics) { + internalMetadata.finishMerge( + session, GravitinoHandle.unWrap(mergeTableHandle), fragments, computedStatistics); + } +} diff --git a/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider435.java b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider435.java new file mode 100644 index 0000000000..e45753da54 --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider435.java @@ -0,0 +1,30 @@ +/* + * 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.gravitino.trino.connector; + +import io.trino.spi.connector.ConnectorNodePartitioningProvider; + +/** Trino NodePartitioningProvider implementation with the new split bucket function signature. */ +public class GravitinoNodePartitioningProvider435 extends GravitinoNodePartitioningProvider { + + public GravitinoNodePartitioningProvider435( + ConnectorNodePartitioningProvider nodePartitioningProvider) { + super(nodePartitioningProvider); + } +} diff --git a/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin435.java b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin435.java new file mode 100644 index 0000000000..9a0e8f328a --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin435.java @@ -0,0 +1,38 @@ +/* + * 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.gravitino.trino.connector; + +import org.apache.gravitino.client.GravitinoAdminClient; + +/** Trino plugin endpoint, using java spi mechanism */ +public class GravitinoPlugin435 extends GravitinoPlugin { + + public GravitinoPlugin435() { + super(); + } + + public GravitinoPlugin435(GravitinoAdminClient client) { + super(client); + } + + @Override + protected GravitinoConnectorFactory createConnectorFactory(GravitinoAdminClient client) { + return new GravitinoConnectorFactory435(client); + } +} diff --git a/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager435.java b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager435.java new file mode 100644 index 0000000000..306feea732 --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager435.java @@ -0,0 +1,66 @@ +/* + * 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.gravitino.trino.connector; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.trino.spi.connector.ConnectorSplit; +import io.trino.spi.connector.ConnectorSplitManager; +import io.trino.spi.connector.ConnectorSplitSource; + +public class GravitinoSplitManager435 extends GravitinoSplitManager { + + public GravitinoSplitManager435(ConnectorSplitManager internalSplitManager) { + super(internalSplitManager); + } + + @Override + protected ConnectorSplitSource createSplitSource(ConnectorSplitSource splits) { + return new GravitinoSplitSource435(splits); + } + + static class GravitinoSplitSource435 extends GravitinoSplitSource { + + GravitinoSplitSource435(ConnectorSplitSource connectorSplitSource) { + super(connectorSplitSource); + } + + @Override + protected ConnectorSplit createSplit(ConnectorSplit split) { + return new GravitinoSplit435(split); + } + } + + public static class GravitinoSplit435 extends GravitinoSplit { + + @JsonCreator + public GravitinoSplit435(@JsonProperty(HANDLE_STRING) String handleString) { + super(handleString); + } + + public GravitinoSplit435(ConnectorSplit split) { + super(split); + } + + @Override + public Object getInfo() { + return getInternalHandle().getInfo(); + } + } +} diff --git a/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector435.java b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector435.java new file mode 100644 index 0000000000..e3c3074367 --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector435.java @@ -0,0 +1,87 @@ +/* + * 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.gravitino.trino.connector; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.trino.spi.Page; +import io.trino.spi.connector.ConnectorPageSource; +import io.trino.spi.connector.ConnectorPageSourceProvider; +import io.trino.spi.connector.ConnectorSplit; +import io.trino.spi.connector.ConnectorSplitManager; +import io.trino.spi.connector.SchemaTableName; +import org.apache.gravitino.trino.connector.system.GravitinoSystemConnector; +import org.apache.gravitino.trino.connector.system.storedprocedure.GravitinoStoredProcedureFactory; + +public class GravitinoSystemConnector435 extends GravitinoSystemConnector { + + public GravitinoSystemConnector435( + GravitinoStoredProcedureFactory gravitinoStoredProcedureFactory) { + super(gravitinoStoredProcedureFactory); + } + + @Override + protected ConnectorSplitManager createSplitManager() { + return new GravitinoSplitManager435(); + } + + @Override + protected ConnectorPageSourceProvider createPageSourceProvider() { + return new DatasourceProvider435(); + } + + static class DatasourceProvider435 extends DatasourceProvider { + + @Override + protected ConnectorPageSource createPageSource(Page page) { + return new SystemTablePageSource435(page); + } + } + + static class GravitinoSplitManager435 extends SplitManager { + + protected ConnectorSplit createSplit(SchemaTableName tableName) { + return new Split435(tableName); + } + } + + static class SystemTablePageSource435 extends SystemTablePageSource { + + public SystemTablePageSource435(Page page) { + super(page); + } + + public Page getNextPage() { + return nextPage(); + } + } + + public static class Split435 extends Split { + + @JsonCreator + public Split435(@JsonProperty("tableName") SchemaTableName tableName) { + super(tableName); + } + + @Override + public Object getInfo() { + return this; + } + } +} diff --git a/trino-connector/trino-connector-435-439/src/main/resources/META-INF/services/io.trino.spi.Plugin b/trino-connector/trino-connector-435-439/src/main/resources/META-INF/services/io.trino.spi.Plugin new file mode 100644 index 0000000000..aafac3a96c --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/main/resources/META-INF/services/io.trino.spi.Plugin @@ -0,0 +1,19 @@ +# +# 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. +# +org.apache.gravitino.trino.connector.GravitinoPlugin435 \ No newline at end of file diff --git a/trino-connector/trino-connector-435-439/src/test/java/TestGravitinoConnector435.java b/trino-connector/trino-connector-435-439/src/test/java/TestGravitinoConnector435.java new file mode 100644 index 0000000000..eb767c7dda --- /dev/null +++ b/trino-connector/trino-connector-435-439/src/test/java/TestGravitinoConnector435.java @@ -0,0 +1,59 @@ +/* + * 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. + */ + +import static io.trino.testing.TestingSession.testSessionBuilder; + +import io.trino.Session; +import io.trino.testing.DistributedQueryRunner; +import org.apache.gravitino.client.GravitinoAdminClient; +import org.apache.gravitino.trino.connector.GravitinoPlugin; +import org.apache.gravitino.trino.connector.GravitinoPlugin435; +import org.apache.gravitino.trino.connector.TestGravitinoConnector; +import org.apache.gravitino.trino.connector.TestGravitinoConnectorWithMetalakeCatalogName; +import org.junit.jupiter.api.Nested; + +public class TestGravitinoConnector435 { + @Nested + class SingleMetalake extends TestGravitinoConnector { + @Override + protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient client) { + return new GravitinoPlugin435(client); + } + + @Override + protected DistributedQueryRunner createTrinoQueryRunner() throws Exception { + Session session = testSessionBuilder().setCatalog("gravitino").build(); + return DistributedQueryRunner.builder(session).setNodeCount(1).build(); + } + } + + @Nested + class MultiMetalake extends TestGravitinoConnectorWithMetalakeCatalogName { + @Override + protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient client) { + return new GravitinoPlugin435(client); + } + + @Override + protected DistributedQueryRunner createTrinoQueryRunner() throws Exception { + Session session = testSessionBuilder().setCatalog("gravitino").build(); + return DistributedQueryRunner.builder(session).setNodeCount(1).build(); + } + } +} diff --git a/trino-connector/trino-connector/build.gradle.kts b/trino-connector/trino-connector/build.gradle.kts index a43e1a0faa..17b87d889c 100644 --- a/trino-connector/trino-connector/build.gradle.kts +++ b/trino-connector/trino-connector/build.gradle.kts @@ -17,8 +17,6 @@ * under the License. */ -import net.ltgt.gradle.errorprone.errorprone - plugins { id("java") id("idea") @@ -32,18 +30,6 @@ val minSupportedTrinoVersionProperty = providers.gradleProperty("minSupportedTri val trinoVersionProperty = providers.gradleProperty("trinoVersion").orElse(minSupportedTrinoVersionProperty) val trinoVersion = trinoVersionProperty.map { it.trim().toInt() }.get() -// Trino 440+'s trino-spi is compiled for JDK 21+, so this module needs the same JDK 24 -// toolchain the versioned trino-connector-<range> modules use. Error Prone is incompatible -// with that toolchain, so it is disabled here too, matching those modules' own override. -java { - toolchain.languageVersion.set(JavaLanguageVersion.of(24)) -} - -tasks.withType<JavaCompile>().configureEach { - options.errorprone.isEnabled.set(false) - options.release.set(17) -} - dependencies { implementation(project(":catalogs:catalog-common")) implementation(project(":clients:client-java-runtime", configuration = "shadow")) diff --git a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConfig.java b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConfig.java index f109b37c7e..817d9f6306 100644 --- a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConfig.java +++ b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConfig.java @@ -231,7 +231,7 @@ public class GravitinoConfig { private static final ConfigEntry GRAVITINO_TRINO_SKIP_VERSION_VALIDATION = new ConfigEntry( "gravitino.trino.skip-version-validation", - "When true, skips Trino version validation and logs a warning instead of throwing an error. Gravitino supports Trino versions 440-478; other versions are untested.", + "When true, skips Trino version validation and logs a warning instead of throwing an error. Gravitino supports Trino versions 435-439; other versions are untested.", "false", false); diff --git a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java index 222fb0e99f..722a75e7ea 100644 --- a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java +++ b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java @@ -51,7 +51,7 @@ import org.apache.gravitino.trino.connector.system.table.GravitinoSystemTableFac public class GravitinoConnectorFactory implements ConnectorFactory { private static final Logger LOG = Logger.get(GravitinoConnectorFactory.class); - private static final int MIN_SUPPORT_TRINO_SPI_VERSION = 440; + private static final int MIN_SUPPORT_TRINO_SPI_VERSION = 435; private static final int MAX_SUPPORT_TRINO_SPI_VERSION = Integer.MAX_VALUE; private static final Pattern TRINO_SPI_VERSION_PATTERN = Pattern.compile("^(\\d+)"); private static final Set<String> SECURITY_SENSITIVE_PROPERTY_SUFFIXES =
