Skip to content

Commit a72844e

Browse files
committed
[#10717] fix(trino-connector): Enable multi-metalake support for Trino 469+
Enable supportCatalogNameWithMetalake for Trino 469-472 and 473-478 by removing the false override, allowing them to inherit the base class default (true). Enable the corresponding MultiMetalake tests. For unsupported versions (452-468), change the hard TrinoException to a LOG.warn so multi-metalake mode degrades gracefully instead of failing. Enable the MultiMetalake test for 446-451 to match its factory (supportCatalogNameWithMetalake=true). Override testCreateCatalog to skip drop assertions due to a Trino 446 bug where DROP CATALOG does not unquote quoted identifiers.
1 parent ba486bf commit a72844e

8 files changed

Lines changed: 48 additions & 36 deletions

File tree

docs/trino-connector/configuration.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ license: "This software is licensed under the Apache License version 2."
1616
| 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 | 1.0.0 |
1717
| gravitino.client. | string | (none) | The configuration key prefix for the Gravitino client config. | No | 1.0.0 |
1818
| 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 | 1.2.0 |
19+
| 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 | 1.2.0 |
1920

2021
To configure the Gravitino client, use properties prefixed with `gravitino.client.`. These properties will directly passed to the Gravitino client.
2122

2223
**Note:** Invalid configuration properties will result in exceptions. Please see [Gravitino Java client configurations](../how-to-use-gravitino-client.md#gravitino-java-client-configuration) for more support client configuration.
2324

25+
Multi-metalake mode (`gravitino.use-single-metalake=false`) is supported on Trino connector versions 435-451 and 469-478. On versions 452-468, a warning is logged and the connector initializes, but the mode is not fully supported and some operations may fail.
26+
2427
## Authentication
2528

2629
The Gravitino Trino connector supports authenticating to the Gravitino server using Simple, OAuth, and Kerberos authentication. For detailed authentication configuration, please refer to [Trino Connector Authentication](./authentication.md).

trino-connector/trino-connector-446-451/src/test/java/TestGravitinoConnector446.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919

2020
import static io.trino.testing.TestingSession.testSessionBuilder;
21+
import static org.assertj.core.api.Assertions.assertThat;
2122

2223
import io.trino.Session;
2324
import io.trino.testing.DistributedQueryRunner;
@@ -26,8 +27,8 @@
2627
import org.apache.gravitino.trino.connector.GravitinoPlugin446;
2728
import org.apache.gravitino.trino.connector.TestGravitinoConnector;
2829
import org.apache.gravitino.trino.connector.TestGravitinoConnectorWithMetalakeCatalogName;
29-
import org.junit.jupiter.api.Disabled;
3030
import org.junit.jupiter.api.Nested;
31+
import org.junit.jupiter.api.Test;
3132

3233
public class TestGravitinoConnector446 {
3334
@Nested
@@ -45,7 +46,6 @@ protected DistributedQueryRunner createTrinoQueryRunner() throws Exception {
4546
}
4647

4748
@Nested
48-
@Disabled
4949
class MultiMetalake extends TestGravitinoConnectorWithMetalakeCatalogName {
5050
@Override
5151
protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient client) {
@@ -57,5 +57,33 @@ protected DistributedQueryRunner createTrinoQueryRunner() throws Exception {
5757
Session session = testSessionBuilder().setCatalog("gravitino").build();
5858
return DistributedQueryRunner.builder(session).setWorkerCount(1).build();
5959
}
60+
61+
@Override
62+
protected String getTrinoCliCatalogName(String metalake, String catalog) {
63+
return metalake + "." + catalog;
64+
}
65+
66+
@Override
67+
protected String getTrinoSqlCatalogName(String metalakeName, String catalogName) {
68+
return "\"" + metalakeName + "." + catalogName + "\"";
69+
}
70+
71+
// Trino 446-451 has a bug where DROP CATALOG does not unquote identifiers,
72+
// so DROP CATALOG "test.memory1" looks up the literal name '"test.memory1"'
73+
// instead of 'test.memory1'. Override to test only creation (the core
74+
// multi-metalake functionality) and skip the drop-and-verify assertions.
75+
@Override
76+
@Test
77+
public void testCreateCatalog() throws Exception {
78+
assertThat(computeActual("show catalogs").getOnlyColumnAsSet()).contains("gravitino");
79+
assertThat(computeActual("show catalogs").getOnlyColumnAsSet())
80+
.contains(getTrinoCliCatalogName("test", "memory"));
81+
82+
assertThat(computeActual("select * from system.jdbc.tables").getRowCount()).isGreaterThan(1);
83+
84+
assertUpdate("call gravitino.system.create_catalog('memory1', 'memory', Map())");
85+
assertThat(computeActual("show catalogs").getOnlyColumnAsSet())
86+
.contains(getTrinoCliCatalogName("test", "memory1"));
87+
}
6088
}
6189
}

trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory452.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,6 @@ protected int getMaxSupportTrinoSpiVersion() {
3939
return 468;
4040
}
4141

42-
@Override
43-
protected String getTrinoCatalogName(String metalake, String catalog) {
44-
return "\"" + metalake + "." + catalog + "\"";
45-
}
46-
4742
@Override
4843
protected boolean supportCatalogNameWithMetalake() {
4944
return false;

trino-connector/trino-connector-469-472/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory469.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,6 @@ protected int getMaxSupportTrinoSpiVersion() {
3939
return 472;
4040
}
4141

42-
@Override
43-
protected String getTrinoCatalogName(String metalake, String catalog) {
44-
return "\"" + metalake + "." + catalog + "\"";
45-
}
46-
47-
@Override
48-
protected boolean supportCatalogNameWithMetalake() {
49-
return false;
50-
}
51-
5242
@Override
5343
protected GravitinoConnector createConnector(CatalogConnectorContext connectorContext) {
5444
return new GravitinoConnector469(connectorContext);

trino-connector/trino-connector-469-472/src/test/java/TestGravitinoConnector469.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.apache.gravitino.trino.connector.GravitinoPlugin469;
2727
import org.apache.gravitino.trino.connector.TestGravitinoConnector;
2828
import org.apache.gravitino.trino.connector.TestGravitinoConnectorWithMetalakeCatalogName;
29-
import org.junit.jupiter.api.Disabled;
3029
import org.junit.jupiter.api.Nested;
3130

3231
public class TestGravitinoConnector469 {
@@ -45,7 +44,6 @@ protected DistributedQueryRunner createTrinoQueryRunner() throws Exception {
4544
}
4645

4746
@Nested
48-
@Disabled
4947
class MultiMetalake extends TestGravitinoConnectorWithMetalakeCatalogName {
5048
@Override
5149
protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient client) {

trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory478.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,6 @@ protected int getMaxSupportTrinoSpiVersion() {
3939
return 478;
4040
}
4141

42-
@Override
43-
protected String getTrinoCatalogName(String metalake, String catalog) {
44-
return "\"" + metalake + "." + catalog + "\"";
45-
}
46-
47-
@Override
48-
protected boolean supportCatalogNameWithMetalake() {
49-
return false;
50-
}
51-
5242
@Override
5343
protected GravitinoConnector createConnector(CatalogConnectorContext connectorContext) {
5444
return new GravitinoConnector478(connectorContext);

trino-connector/trino-connector-473-478/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnector478.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import io.trino.Session;
2424
import io.trino.testing.DistributedQueryRunner;
2525
import org.apache.gravitino.client.GravitinoAdminClient;
26-
import org.junit.jupiter.api.Disabled;
2726
import org.junit.jupiter.api.Nested;
2827

2928
public class TestGravitinoConnector478 {
@@ -42,7 +41,6 @@ protected DistributedQueryRunner createTrinoQueryRunner() throws Exception {
4241
}
4342

4443
@Nested
45-
@Disabled
4644
class MultiMetalake extends TestGravitinoConnectorWithMetalakeCatalogName {
4745
@Override
4846
protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient client) {
@@ -54,5 +52,15 @@ protected DistributedQueryRunner createTrinoQueryRunner() throws Exception {
5452
Session session = testSessionBuilder().setCatalog("gravitino").build();
5553
return DistributedQueryRunner.builder(session).setWorkerCount(0).build();
5654
}
55+
56+
@Override
57+
protected String getTrinoCliCatalogName(String metalake, String catalog) {
58+
return metalake + "." + catalog;
59+
}
60+
61+
@Override
62+
protected String getTrinoSqlCatalogName(String metalakeName, String catalogName) {
63+
return "\"" + metalakeName + "." + catalogName + "\"";
64+
}
5765
}
5866
}

trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,11 @@ private void checkTrinoSpiVersion(ConnectorContext context, GravitinoConfig conf
161161

162162
// check catalog name with metalake are supported in this trino version
163163
if (!config.singleMetalakeMode() && !supportCatalogNameWithMetalake()) {
164-
String errmsg =
165-
String.format(
166-
"The trino-connector-%s-%s does not support catalog name with metalake.",
167-
getMinSupportTrinoSpiVersion(), getMaxSupportTrinoSpiVersion());
168-
throw new TrinoException(GravitinoErrorCode.GRAVITINO_UNSUPPORTED_TRINO_VERSION, errmsg);
164+
LOG.warn(
165+
"The trino-connector-{}-{} does not fully support catalog name with metalake. "
166+
+ "The DROP CATALOG operation may not work correctly in multi-metalake mode.",
167+
getMinSupportTrinoSpiVersion(),
168+
getMaxSupportTrinoSpiVersion());
169169
}
170170

171171
// skip version validation

0 commit comments

Comments
 (0)