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

yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new a5e2eeeb5a [#7628] refactor(trino-connector): Support skip Trino 
version validation (#7629)
a5e2eeeb5a is described below

commit a5e2eeeb5a4851f7f9d818955613afd311565d2a
Author: qbhan <[email protected]>
AuthorDate: Fri Jul 11 20:29:22 2025 +0800

    [#7628] refactor(trino-connector): Support skip Trino version validation 
(#7629)
    
    ### What changes were proposed in this pull request?
    
    Support skip Trino version validation.
    
    ### Why are the changes needed?
    
    Now `CatalogRegister#checkTrinoSpiVersion` will throw exception if Trino
    version not from 435 to 439. This may restrict access for users of other
    versions, but some features may still function normally in incompatible
    versions.​
    
    Fix: #7628
    
    ### Does this PR introduce _any_ user-facing change?
    
    - add property `gravitino.trino.skip-version-validation` in
    `org.apache.gravitino.trino.connector.GravitinoConfig`
    
    ### How was this patch tested?
    local test
---
 docs/trino-connector/configuration.md              |  1 +
 docs/trino-connector/requirements.md               |  3 ++-
 .../gravitino/trino/connector/GravitinoConfig.java | 19 ++++++++++++++++++
 .../trino/connector/catalog/CatalogRegister.java   | 21 ++++++++++++++------
 .../trino/connector/TestGravitinoConfig.java       | 23 ++++++++++++++++++++++
 5 files changed, 60 insertions(+), 7 deletions(-)

diff --git a/docs/trino-connector/configuration.md 
b/docs/trino-connector/configuration.md
index 3c5b1a6858..a47e23ae5c 100644
--- a/docs/trino-connector/configuration.md
+++ b/docs/trino-connector/configuration.md
@@ -13,3 +13,4 @@ license: "This software is licensed under the Apache License 
version 2."
 | trino.jdbc.user                             | string  | admin                
 | The jdbc user name of current Trino.                                         
                                                                                
                                                                                
                                                                       | NO     
  | 0.5.1         |
 | trino.jdbc.password                         | string  | (none)               
 | The jdbc password of current Trino.                                          
                                                                                
                                                                                
                                                                       | NO     
  | 0.5.1         |
 | 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       | 0.9.0         |
+| gravitino.trino.skip-version-validation     | boolean | false                
 | The `gravitino.trino.skip-version-validation` defines whether skip Trino 
version validation or not. Note that Gravitino only supports Trino which 
version between 435 and 439, other versions of Trino have not undergone 
thorough testing, so there may be compatiablity problem if true.                
          | No       | 1.0.0         |
diff --git a/docs/trino-connector/requirements.md 
b/docs/trino-connector/requirements.md
index 1723e6f9a1..5c1d7c7541 100644
--- a/docs/trino-connector/requirements.md
+++ b/docs/trino-connector/requirements.md
@@ -7,7 +7,8 @@ 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-435 and Trino-server-439.
+- Trino server version should be between Trino-server-435 and 
Trino-server-439. 
+  If you use other versions of Trino, you can set the 
`gravitino.trino.skip-version-validation` to `true`.
   Other versions of Trino have not undergone thorough testing.
 - Ensure that all nodes running Trino can access the Gravitino server's port, 
which defaults to 8090.
 - Ensure that all nodes running Trino can access the real catalogs resources, 
such as Hive, Iceberg, MySQL, PostgreSQL, etc.
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 eaf2fda2cf..581744a129 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
@@ -119,6 +119,13 @@ public class GravitinoConfig {
           "10",
           false);
 
+  private static final ConfigEntry GRAVITINO_TRINO_SKIP_VERSION_VALIDATION =
+      new ConfigEntry(
+          "gravitino.trino.skip-version-validation",
+          "The property to specify whether skip Trino version validation or 
not. Note there may be compatiablity problem if true.",
+          "false",
+          false);
+
   /**
    * Constructs a new GravitinoConfig with the specified configuration.
    *
@@ -293,6 +300,18 @@ public class GravitinoConfig {
         GRAVITINO_METADATA_REFRESH_INTERVAL_SECOND.defaultValue);
   }
 
+  /**
+   * Whether skip Trino version validation or not.
+   *
+   * @return whether skip Trino version validation or not
+   */
+  public Boolean isSkipTrinoVersionValidation() {
+    return Boolean.parseBoolean(
+        config.getOrDefault(
+            GRAVITINO_TRINO_SKIP_VERSION_VALIDATION.key,
+            GRAVITINO_TRINO_SKIP_VERSION_VALIDATION.defaultValue));
+  }
+
   static class ConfigEntry {
     final String key;
 
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogRegister.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogRegister.java
index 1c8223d2fa..5e26bf700d 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogRegister.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogRegister.java
@@ -63,13 +63,22 @@ public class CatalogRegister {
   private void checkTrinoSpiVersion(ConnectorContext context) {
     this.trinoVersion = context.getSpiVersion();
 
-    int version = Integer.parseInt(context.getSpiVersion());
+    int version = Integer.parseInt(trinoVersion);
+
     if (version < MIN_SUPPORT_TRINO_SPI_VERSION || version > 
MAX_SUPPORT_TRINO_SPI_VERSION) {
-      String errmsg =
-          String.format(
-              "Unsupported Trino-%s version. The Supported version for the 
Gravitino-Trino-connector from Trino-%d to Trino-%d",
-              trinoVersion, MIN_SUPPORT_TRINO_SPI_VERSION, 
MAX_SUPPORT_TRINO_SPI_VERSION);
-      throw new 
TrinoException(GravitinoErrorCode.GRAVITINO_UNSUPPORTED_TRINO_VERSION, errmsg);
+      Boolean skipTrinoVersionValidation = 
config.isSkipTrinoVersionValidation();
+      if (!skipTrinoVersionValidation) {
+        String errmsg =
+            String.format(
+                "Unsupported Trino-%s version. The Supported version for the 
Gravitino-Trino-connector from Trino-%d to Trino-%d."
+                    + "Maybe you can set 
gravitino.trino.skip-version-validation to skip version validation.",
+                trinoVersion, MIN_SUPPORT_TRINO_SPI_VERSION, 
MAX_SUPPORT_TRINO_SPI_VERSION);
+        throw new 
TrinoException(GravitinoErrorCode.GRAVITINO_UNSUPPORTED_TRINO_VERSION, errmsg);
+      } else {
+        LOG.warn(
+            "The version %s has not undergone thorough testing with Gravitino, 
there may be compatiablity problem.",
+            trinoVersion);
+      }
     }
 
     isCoordinator = context.getNodeManager().getCurrentNode().isCoordinator();
diff --git 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConfig.java
 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConfig.java
index 07100f447d..37df0c7b01 100644
--- 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConfig.java
+++ 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConfig.java
@@ -61,4 +61,27 @@ public class TestGravitinoConfig {
       }
     }
   }
+
+  @Test
+  public void testGravitinoConfigWithSkipTrinoVersionValidation() {
+    String gravitinoUrl = "http://127.0.0.1:8000";;
+    String metalake = "user_001";
+    ImmutableMap<String, String> configMap =
+        ImmutableMap.of("gravitino.uri", gravitinoUrl, "gravitino.metalake", 
metalake);
+    GravitinoConfig config = new GravitinoConfig(configMap);
+
+    assertEquals(config.isSkipTrinoVersionValidation(), false);
+
+    ImmutableMap<String, String> configMapWithSkipValidation =
+        ImmutableMap.of(
+            "gravitino.uri",
+            gravitinoUrl,
+            "gravitino.metalake",
+            metalake,
+            "gravitino.trino.skip-version-validation",
+            "true");
+    GravitinoConfig configWithSkipValidation = new 
GravitinoConfig(configMapWithSkipValidation);
+
+    assertEquals(configWithSkipValidation.isSkipTrinoVersionValidation(), 
true);
+  }
 }

Reply via email to