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(