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

diqiu50 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 d6e8978eb7 [#7906] improvement(trino-connector): Increase the priority 
of configuration which is defined by Gravitino (#7907)
d6e8978eb7 is described below

commit d6e8978eb789f9861ea1e8603b401f152b7edabf
Author: qbhan <[email protected]>
AuthorDate: Tue Aug 5 10:16:28 2025 +0800

    [#7906] improvement(trino-connector): Increase the priority of 
configuration which is defined by Gravitino (#7907)
    
    ### What changes were proposed in this pull request?
    `trino.bypass` properties will be skipped when the catalog properties is
    defined by Gravitino
    
    ### Why are the changes needed?
    Fix: #7906
    
    ### Does this PR introduce _any_ user-facing change?
    No
    
    ### How was this patch tested?
    local tests
    
    Co-authored-by: Mini Yu <[email protected]>
---
 docs/trino-connector/supported-catalog.md                 |  1 +
 .../trino/connector/catalog/CatalogPropertyConverter.java | 15 ++++++++++++++-
 .../connector/catalog/hive/HiveConnectorAdapter.java      |  6 ++++--
 .../catalog/iceberg/IcebergCatalogPropertyConverter.java  |  7 +++++--
 .../catalog/hive/TestHiveCatalogPropertyConverter.java    |  3 +++
 .../iceberg/TestIcebergCatalogPropertyConverter.java      |  3 +++
 .../jdbc/mysql/TestMySQLCatalogPropertyConverter.java     |  3 +++
 7 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/docs/trino-connector/supported-catalog.md 
b/docs/trino-connector/supported-catalog.md
index 0356ae7866..e2882c0dac 100644
--- a/docs/trino-connector/supported-catalog.md
+++ b/docs/trino-connector/supported-catalog.md
@@ -137,6 +137,7 @@ call gravitino.system.create_catalog(
 ```
 
 A prefix with `trino.bypass.` in the configuration key is used to indicate 
Gravitino Trino connector to pass the Trino connector configuration to the 
Gravitino catalog in the Trino runtime.
+Note that it is when a configuration property is explicitly defined in 
Gravitino that the `trino.bypass.`properties which for the same property will 
be skipped.
 
 More Trino connector configurations can refer to:
 - [Hive 
catalog](https://trino.io/docs/current/connector/hive.html#hive-general-configuration-properties)
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogPropertyConverter.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogPropertyConverter.java
index f15e305dc8..adb6d11d43 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogPropertyConverter.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogPropertyConverter.java
@@ -47,10 +47,12 @@ public class CatalogPropertyConverter extends 
PropertyConverter {
   public Map<String, String> gravitinoToEngineProperties(Map<String, String> 
gravitinoProperties) {
     Map<String, String> engineProperties = new HashMap<>();
     Map<String, String> gravitinoToEngineMapping = 
reverseMap(engineToGravitinoMapping());
+    Map<String, String> trinoBypassProperties = new HashMap<>();
     for (Map.Entry<String, String> entry : gravitinoProperties.entrySet()) {
       String gravitinoKey = entry.getKey();
       if (gravitinoKey.startsWith(TRINO_PROPERTIES_PREFIX)) {
-        engineProperties.put(gravitinoKey.replace(TRINO_PROPERTIES_PREFIX, 
""), entry.getValue());
+        trinoBypassProperties.put(
+            gravitinoKey.replace(TRINO_PROPERTIES_PREFIX, ""), 
entry.getValue());
         continue;
       }
       String engineKey = gravitinoToEngineMapping.get(gravitinoKey);
@@ -60,6 +62,17 @@ public class CatalogPropertyConverter extends 
PropertyConverter {
         LOG.info("Property {} is not supported by engine", entry.getKey());
       }
     }
+    // trino.bypass properties will be skipped when the catalog properties is 
defined by Gravitino
+    if (!trinoBypassProperties.isEmpty()) {
+      for (Map.Entry<String, String> entry : trinoBypassProperties.entrySet()) 
{
+        String key = entry.getKey();
+        if (!engineProperties.containsKey(key)) {
+          engineProperties.put(key, entry.getValue());
+        } else {
+          LOG.info("Property {} which with trino.bypass prefix is skipped", 
key);
+        }
+      }
+    }
     return engineProperties;
   }
 }
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/hive/HiveConnectorAdapter.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/hive/HiveConnectorAdapter.java
index 1e9ecec73d..ce2ef4363b 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/hive/HiveConnectorAdapter.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/hive/HiveConnectorAdapter.java
@@ -49,11 +49,13 @@ public class HiveConnectorAdapter implements 
CatalogConnectorAdapter {
   public Map<String, String> buildInternalConnectorConfig(GravitinoCatalog 
catalog)
       throws Exception {
     Map<String, String> config = new HashMap<>();
-    config.put("hive.metastore.uri", 
catalog.getRequiredProperty("metastore.uris"));
-    config.put("hive.security", "allow-all");
+    String metastoreUri = catalog.getRequiredProperty("metastore.uris");
     Map<String, String> trinoProperty =
         catalogConverter.gravitinoToEngineProperties(catalog.getProperties());
+    // The order of put operations determines the priority of parameters.
     config.putAll(trinoProperty);
+    config.put("hive.metastore.uri", metastoreUri);
+    config.put("hive.security", "allow-all");
     return config;
   }
 
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/iceberg/IcebergCatalogPropertyConverter.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/iceberg/IcebergCatalogPropertyConverter.java
index aabf2e60f3..02b15cb40c 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/iceberg/IcebergCatalogPropertyConverter.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/iceberg/IcebergCatalogPropertyConverter.java
@@ -55,8 +55,11 @@ public class IcebergCatalogPropertyConverter extends 
CatalogPropertyConverter {
       default:
         throw new UnsupportedOperationException("Unsupported backend type: " + 
backend);
     }
-    stringStringMap.putAll(super.gravitinoToEngineProperties(properties));
-    return stringStringMap;
+    Map<String, String> config = new HashMap<>();
+    // The order of put operations determines the priority of parameters.
+    config.putAll(super.gravitinoToEngineProperties(properties));
+    config.putAll(stringStringMap);
+    return config;
   }
 
   private Map<String, String> buildHiveBackendProperties(Map<String, String> 
properties) {
diff --git 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/hive/TestHiveCatalogPropertyConverter.java
 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/hive/TestHiveCatalogPropertyConverter.java
index e92f0705e7..af9ff8a3b1 100644
--- 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/hive/TestHiveCatalogPropertyConverter.java
+++ 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/hive/TestHiveCatalogPropertyConverter.java
@@ -51,12 +51,15 @@ public class TestHiveCatalogPropertyConverter {
   @SuppressWarnings("unchecked")
   public void testBuildConnectorProperties() throws Exception {
     String name = "test_catalog";
+    // trino.bypass properties will be skipped when the catalog properties is 
defined by Gravitino
     Map<String, String> properties =
         ImmutableMap.<String, String>builder()
+            .put("trino.bypass.hive.security", "skip_value")
             .put("metastore.uris", "thrift://localhost:9083")
             .put("unknown-key", "1")
             .put("trino.bypass.hive.unknown-key", "1")
             .put("trino.bypass.hive.config.resources", "/tmp/hive-site.xml, 
/tmp/core-site.xml")
+            .put("trino.bypass.hive.metastore.uri", "skip_value")
             .build();
     Catalog mockCatalog =
         TestGravitinoCatalog.mockCatalog(
diff --git 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/iceberg/TestIcebergCatalogPropertyConverter.java
 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/iceberg/TestIcebergCatalogPropertyConverter.java
index abc3a3e4b4..afcb81bcce 100644
--- 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/iceberg/TestIcebergCatalogPropertyConverter.java
+++ 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/iceberg/TestIcebergCatalogPropertyConverter.java
@@ -129,8 +129,10 @@ public class TestIcebergCatalogPropertyConverter {
   @SuppressWarnings("unchecked")
   public void testBuildConnectorPropertiesWithMySqlBackEnd() throws Exception {
     String name = "test_catalog";
+    // trino.bypass properties will be skipped when the catalog properties is 
defined by Gravitino
     Map<String, String> properties =
         ImmutableMap.<String, String>builder()
+            .put("trino.bypass.iceberg.jdbc-catalog.connection-url", 
"skip_value")
             .put("uri", 
"jdbc:mysql://%s:3306/metastore_db?createDatabaseIfNotExist=true")
             .put("catalog-backend", "jdbc")
             .put("warehouse", "://tmp/warehouse")
@@ -140,6 +142,7 @@ public class TestIcebergCatalogPropertyConverter {
             .put("unknown-key", "1")
             .put("trino.bypass.iceberg.unknown-key", "1")
             .put("trino.bypass.iceberg.table-statistics-enabled", "true")
+            .put("trino.bypass.iceberg.jdbc-catalog.connection-user", 
"skip_value")
             .build();
     Catalog mockCatalog =
         TestGravitinoCatalog.mockCatalog(
diff --git 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLCatalogPropertyConverter.java
 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLCatalogPropertyConverter.java
index 281a1266b6..79b73f1756 100644
--- 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLCatalogPropertyConverter.java
+++ 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLCatalogPropertyConverter.java
@@ -32,14 +32,17 @@ public class TestMySQLCatalogPropertyConverter {
   @SuppressWarnings("unchecked")
   public void testBuildMySqlConnectorProperties() throws Exception {
     String name = "test_catalog";
+    // trino.bypass properties will be skipped when the catalog properties is 
defined by Gravitino
     Map<String, String> properties =
         ImmutableMap.<String, String>builder()
+            .put("trino.bypass.connection-user", "skip_value")
             .put("jdbc-url", "jdbc:mysql://localhost:5432/test")
             .put("jdbc-user", "test")
             .put("jdbc-password", "test")
             .put("trino.bypass.join-pushdown.strategy", "EAGER")
             .put("unknown-key", "1")
             .put("trino.bypass.mysql.unknown-key", "1")
+            .put("trino.bypass.connection-url", "skip_value")
             .build();
     Catalog mockCatalog =
         TestGravitinoCatalog.mockCatalog(

Reply via email to