Apache Gravitino 1.3.1
We are glad to announce the release of Apache Gravitino 1.3.1! This is a patch release that focuses on stability, correctness, and security hardening. It carries a large number of fixes across the core server, authorization, Iceberg REST, the Trino, Spark and Flink connectors, and the ClickHouse, Doris, Glue, Hive, JDBC and Lance catalogs. It also completes tag support for views and functions across the Java and Python clients, adds view APIs to the Python client, and introduces extension SPIs that let downstream projects plug in their own catalog adapters.
Although 1.3.1 is a patch release, the Trino and Spark connectors contain several behavior changes that require action before upgrading from 1.3.0. Please read the section below first.
Upgrade Notes / Behavior Changes
Each of the changes below leaves a cluster looking healthy immediately after the upgrade and fails later, so review them before upgrading rather than after.
Trino connector
-
Non-REST
lakehouse-icebergcatalogs are now routed through the Gravitino Iceberg REST service (IRC) by default. #12554 A metalake withcatalog-backend=jdbcorhiveIceberg catalogs changes behavior on upgrade: the connector now builds an internal Iceberg REST catalog against Gravitino's IRC instead of translatingcatalog-backendinto Trino'sjdbc/hive_metastorecatalog type. Setgravitino.iceberg.rest-routing-enabled=falseto keep the previous behavior. -
If the IRC has authentication enabled, it now requires its own credential, configured separately on every Trino node. #12554 This credential is not derived from Gravitino catalog properties and does not travel with the generated
CREATE CATALOGstatement. It must be set locally incatalog.properties(or through Trino's${ENV:...}secret substitution) on the coordinator and every worker before upgrading:gravitino.iceberg.rest-catalog.security=OAUTH2
gravitino.iceberg.rest-catalog.oauth2.credential=${ENV:IRC_OAUTH_CREDENTIAL}
gravitino.iceberg.rest-catalog.oauth2.server-uri=http://your-idp/token
gravitino.iceberg.rest-catalog.oauth2.scope=emailMissing this on any node does not fail
CREATE CATALOG— the catalog registers and lists normally. It surfaces only as an authentication error the first time a query on that node reaches the IRC. -
The internal JDBC connection credential (
trino.jdbc.password) is no longer propagated into the catalogs the connector creates. #12542 It no longer reaches connector logs or the generated catalog properties file.
Spark connector
-
Non-REST
lakehouse-icebergcatalogs are now routed through the IRC by default, matching Trino. #12709 Setspark.sql.gravitino.iceberg.rest-routing-enabled=falseto keep the previous behavior. -
When no IRC endpoint can be discovered, the connector now fails with an actionable error instead of silently falling back to Hive/JDBC translation. #12709 Set
spark.sql.gravitino.iceberg.rest-routing-enabled=falseto restore the old fallback. -
If the Gravitino client uses OAuth2, the connector reuses that configuration for the IRC connection by default (
spark.sql.gravitino.iceberg.reuseOAuth2=true). #12709 SetreuseOAuth2=falseto configure the IRC's credential separately.
Trino, Spark and Flink connectors
- An unconstrained PostgreSQL
NUMERICcolumn (no precision or scale) is now read as a string instead ofDecimal(38, 18). #13040 Queries performing arithmetic, aggregation, or comparison on such a column need an explicit cast after upgrading.
Improvements
Core & Server
- Locking: Lock the entity node instead of the schema when creating tables, topics, views and models. #13206
- Service discovery: Support an advertised URI for Iceberg REST service discovery. #13098
- Connection testing: Allow catalog users to test existing catalog connections with stored configuration. #13085
- Health reporting: Report unhealthy status after observed out-of-memory errors. #13066
- Job status: Use
entityStore.update()for job status transitions. #12669 - Ownership: Support group owners in
batchGetOwner. #12532 - Policies: Support FUNCTION and VIEW metadata object policies. #12501
- Catalogs: Support connection tests with proposed changes. #12794
- Catalogs: Support testing existing catalog connections. #12552
- Indexes: Add a
propertiesfield toTableChange.AddIndexfor custom index parameters. #11946 - Security: Harden JDBC unsafe-parameter detection against
connectionPropertiessmuggling. #12024
Authorization
- Performance: Optimize list authorization. #11775
- Performance: Improve the JCasbin permission checks. #12037
- Diagnostics: Show the full
NameIdentifierin denial messages. #12670 - Refactor: Reuse the shared user and group authorization expressions. #12973
- Refactor: Reuse the shared table authorization expressions. #12875
Catalogs & Connectors
- Trino connector: Support Starburst SPI compatibility. #12526
- Trino connector: Add a
CatalogConnectorAdapterProviderSPI for external adapters. #13211 - Trino connector: Make
gravitino.metalakeoptional. #13301 - Trino connector: Defer Iceberg REST passthrough metadata initialization. #13194
- Trino connector: Report catalog registration status through system tables. #12546
- Trino connector: Route lakehouse-iceberg catalogs through the Iceberg REST server. #12554
- Trino connector: Support TLS and session role for the internal JDBC connection. #12542
- Trino connector: Extend session user forwarding to OAuth2, with per-user credential vending for IRC-backed Iceberg. #12045
- Trino connector: Log via
io.airlift.log.Logger. #12634 - Spark connector: Add a
SparkCatalogExtensionSPI for external catalogs. #13208 - Spark connector: Route lakehouse-iceberg catalogs through the Iceberg REST server. #12709
- Flink connector: Recognize catalog types from external
BaseCatalogFactoryjars. #13213 - Flink connector: Allow catalogs to customize Flink type conversion. #12961
- JDBC catalog: Fail fast with a clear error when the JDBC driver is missing. #13192
- ClickHouse: Support setting the data skipping index type. #11912
- Doris: Upgrade the type system for Doris 3.0+/4.0.x compatibility. #11590
