Skip to content

[Cherry-pick to branch-1.3] [#12526] feat(trino-connector): Support Starburst SPI compatibility (#12527) - #12699

Merged
jerryshao merged 1 commit into
apache:branch-1.3from
diqiu50:cherry-pick-12527-to-branch-1.3
Aug 28, 2026
Merged

[Cherry-pick to branch-1.3] [#12526] feat(trino-connector): Support Starburst SPI compatibility (#12527)#12699
jerryshao merged 1 commit into
apache:branch-1.3from
diqiu50:cherry-pick-12527-to-branch-1.3

Conversation

@diqiu50

@diqiu50 diqiu50 commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Cherry-pick Information:

  • Original commit: 7e26ce9
  • Target branch: branch-1.3
  • Status: ✅ Clean cherry-pick (no conflicts)

…lity (apache#12527)

### What changes were proposed in this pull request?

Add compatibility handling for Starburst SPI variants in the Trino
connector, including
`BlockEncodingManager` instantiation, SPI version parsing, and newer
DynamicFilter/ConnectorFactory
SPI methods.

### Why are the changes needed?

Starburst SPI differs from baseline open-source Trino in several
interfaces and internal
constructor signatures. Without these compatibility methods, the
Gravitino connector may
fail to load or execute on Starburst.

Fix: apache#12526

### Does this PR introduce any user-facing change?

The Gravitino Trino connector can run with compatible Starburst SPI
distributions. No new
configuration or public Gravitino API is introduced.

### How was this patch tested?

```text
./gradlew spotlessApply
./gradlew :trino-connector:trino-connector:test -PskipITs
```

Both commands completed successfully.

(cherry picked from commit 7e26ce9)
Copilot AI lite review requested due to automatic review settings August 28, 2026 02:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This cherry-pick improves cross-compatibility of the Gravitino Trino connector with Starburst / newer Trino SPI variants by adding reflective fallbacks for SPI shape differences (constructors + optional methods) and hardening SPI version parsing, with accompanying unit tests.

Changes:

  • Add a compatibility instantiation path for io.trino.metadata.BlockEncodingManager across multiple constructor signatures.
  • Add SPI-version parsing that accepts vendor-suffixed versions and add getSecuritySensitivePropertyNames(...) for newer SPI compatibility.
  • Add reflective forwarding for DynamicFilter#getPreferredDynamicFilterTimeout() and introduce tests for the new behaviors.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/util/json/JsonCodec.java Adds reflective BlockEncodingManager instantiation logic to support multiple Trino/Starburst constructor variants.
trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java Adds vendor-tolerant SPI version parsing and getSecuritySensitivePropertyNames for newer SPI contracts.
trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoDynamicFilter.java Adds reflective forwarding for getPreferredDynamicFilterTimeout() when present at runtime.
trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/util/json/TestJsonCodec.java New unit tests for constructor-probing behavior in JsonCodec.
trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnectorFactory.java New unit tests for sensitive-property detection and SPI version parsing.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.


class TestJsonCodec {

static class NoArgManager {}
Comment on lines +78 to +81
Object instance =
JsonCodec.instantiateBlockEncodingManager(FeaturesConfigManager.class, CLASS_LOADER);
assertThat(instance).isInstanceOfSatisfying(FeaturesConfigManager.class, m -> {});
}
Comment on lines +145 to +163
try {
Class<?> featuresConfigClass = classLoader.loadClass("io.trino.FeaturesConfig");
Constructor<?> ctor = blockEncodingManagerClass.getConstructor(featuresConfigClass);
Object featuresConfig = featuresConfigClass.getConstructor().newInstance();
Object instance = ctor.newInstance(featuresConfig);
LOG.debug("Instantiated BlockEncodingManager with FeaturesConfig");
return instance;
} catch (NoSuchMethodException | ClassNotFoundException ignored) {
// fall through
}

try {
Constructor<?> setCtor = blockEncodingManagerClass.getConstructor(Set.class);
Object instance = setCtor.newInstance(Collections.emptySet());
LOG.debug("Instantiated BlockEncodingManager with an empty BlockEncoding set");
return instance;
} catch (NoSuchMethodException ignored) {
// fall through to last-resort scan
}
@github-actions

Copy link
Copy Markdown

Code Coverage Report

Overall Project 67.65% -0.86% 🟢
Files changed 27.76% 🔴

Module Coverage
aliyun 1.72% 🔴
api 47.73% 🟢
authorization-common 85.96% 🟢
aws 42.04% 🟢
azure 2.47% 🔴
catalog-common 10.4% 🔴
catalog-fileset 80.23% 🟢
catalog-glue 68.95% 🟢
catalog-hive 79.42% 🟢
catalog-jdbc-clickhouse 81.67% 🟢
catalog-jdbc-common 45.48% 🟢
catalog-jdbc-doris 82.36% 🟢
catalog-jdbc-hologres 54.03% 🟢
catalog-jdbc-mysql 79.33% 🟢
catalog-jdbc-oceanbase 78.6% 🟢
catalog-jdbc-postgresql 83.39% 🟢
catalog-jdbc-starrocks 79.16% 🟢
catalog-kafka 77.01% 🟢
catalog-lakehouse-generic 59.18% 🟢
catalog-lakehouse-hudi 79.1% 🟢
catalog-lakehouse-iceberg 85.86% 🟢
catalog-lakehouse-paimon 82.14% 🟢
catalog-model 77.72% 🟢
cli 44.51% 🟢
client-java 77.99% 🟢
common 50.29% -0.15% 🟢
core 82.68% 🟢
filesystem-hadoop3 77.3% 🟢
flink 0.0% 🔴
flink-common 47.12% 🟢
flink-runtime 0.0% 🔴
gcp 14.12% 🔴
hadoop-common 10.88% 🔴
hive-metastore-common 53.77% 🟢
iceberg-aliyun-bundle 0.0% 🔴
iceberg-common 58.15% 🟢
iceberg-rest-server 73.9% 🟢
idp-basic 86.02% 🟢
integration-test-common 0.0% 🔴
jobs 66.17% 🟢
lance-common 24.42% 🔴
lance-rest-server 60.13% 🟢
lineage 53.02% 🟢
optimizer 82.95% 🟢
optimizer-api 21.95% 🔴
server 86.46% 🟢
server-common 76.03% 🟢
spark 28.57% 🔴
spark-common 41.66% 🟢
trino-connector 40.93% -11.59% 🟢
Files
Module File Coverage
common PartitionStatisticsUpdateDTO.java 0.0% 🔴
trino-connector CatalogPropertyConverter.java 100.0% 🟢
GravitinoAuthProvider.java 81.2% 🟢
DropCatalogStoredProcedure.java 53.85% 🔴
GravitinoConnectorPluginManager.java 41.22% 🔴
MySQLMetadataAdapter.java 37.23% 🔴
JsonCodec.java 34.25% 🔴
CatalogConnectorMetadataAdapter.java 33.33% 🔴
CatalogConnectorManager.java 29.78% 🔴
GravitinoConnector.java 28.44% 🔴
GravitinoConnectorFactory.java 19.54% 🔴
GravitinoMetadata.java 15.95% 🔴
CatalogConnectorMetadata.java 15.67% 🔴
CatalogRegister.java 0.89% 🔴
GravitinoDynamicFilter.java 0.0% 🔴
DefaultCatalogConnectorFactory.java 0.0% 🔴
AlterCatalogStoredProcedure.java 0.0% 🔴
CreateCatalogStoredProcedure.java 0.0% 🔴

@jerryshao
jerryshao merged commit 851c8ae into apache:branch-1.3 Aug 28, 2026
32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants