Skip to content

Commit bb46f9b

Browse files
snazydimas-badnanhemanisinghpk234renovate-bot
authored
Dremio merge 2025 09 22 17 05 (apache#123)
* Suppress deprecation warnings in `PolarisSparkCatalog.createTable()` (apache#2631) Background: apache#2394 Since we have to override the deprecated `createTable` method, we suppress deprecation warnings produced by `javac`. Suppressing `RedundantSuppression` is needed for IntelliJ, which appears to consider this a normal situation and does not issue a deprecation warning. * Service: Add Events for PolarisServiceImpl APIs (apache#2482) * CHANGELOG: Freeze change log for 1.1 and clear out unreleased version (apache#2635) * Re-add CHANGELOG.md entry for apache#2197 (apache#2638) Using `git log -p apache-polaris-1.1.0-incubating..553cb06 -- CHANGELOG.md` to find changes missed in the previous CHANGELOG update (apache#2635) * Azure: Fix azure expires at prefix for the credentials refresh (apache#2633) * Remove unused LOG in SparkCatalog (apache#2639) * fix(deps): update dependency com.google.errorprone:error_prone_core to v2.42.0 (apache#2636) * fix(deps): update dependency io.smallrye.config:smallrye-config-core to v3.14.0 (apache#2637) * Fix client license check (apache#2642) * fix(deps): update dependency software.amazon.awssdk:bom to v2.34.0 (apache#2645) * fix(deps): update mockito monorepo to v5.20.0 (apache#2641) * chore(deps): update docker.io/prom/prometheus docker tag to v3.6.0 (apache#2644) * chore(events): unify in-memory buffer listeners implementations (apache#2628) * fix(deps): update quarkus platform and group (apache#2595) * Update jandex dependency to 3.5.0 (apache#2649) * Last merged commit e6796f7 --------- Co-authored-by: Dmitri Bourlatchkov <dmitri.bourlatchkov@gmail.com> Co-authored-by: Adnan Hemani <adnan.h@berkeley.edu> Co-authored-by: Prashant Singh <35593236+singhpk234@users.noreply.github.com> Co-authored-by: Mend Renovate <bot@renovateapp.com> Co-authored-by: Yong Zheng <yongzheng0809@gmail.com> Co-authored-by: Alexandre Dutra <adutra@apache.org>
1 parent b47fd6e commit bb46f9b

27 files changed

+895
-710
lines changed

CHANGELOG.md

Lines changed: 47 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -29,84 +29,74 @@ request adding CHANGELOG notes for breaking (!) changes and possibly other secti
2929

3030
### Highlights
3131

32-
- **HMS Federation Support**: Added support for Hive Metastore (HMS) federation, enabling integration with existing Hive metastores.
33-
34-
- **Modularized Federation**: Introduced modularized federation architecture to support multiple catalog types and improve extensibility.
35-
36-
- **External Authentication**: Added comprehensive support for external identity providers including Keycloak integration and Helm chart configuration options.
37-
38-
- **Python Client Distribution**: The Python client is now packaged and distributed as a proper Python package for easier installation and usage.
39-
40-
- **Catalog Federation CLI**: Extended the CLI with support for managing federated catalogs, making it easier to configure and operate catalog federation.
41-
42-
- **MinIO**: Added MinIO integration support with comprehensive getting started documentation.
43-
4432
### Upgrade Notes
4533

4634
- The EclipseLink Persistence implementation has been deprecated since 1.0.0 and will be completely removed
4735
in 1.3.0 or in 2.0.0 (whichever happens earlier).
4836

4937
### Breaking Changes
5038

51-
- Helm chart: the default value of the `authentication.tokenBroker.secret.symmetricKey.secretKey` property has changed
52-
from `symmetric.pem` to `symmetric.key`.
53-
5439
### New Features
5540

56-
- Added Catalog configuration for S3 and STS endpoints. This also allows using non-AWS S3 implementations.
57-
The realm-level feature flag `ALLOW_SETTING_S3_ENDPOINTS` (default: true) may be used to disable this
58-
functionality.
59-
60-
- The `IMPLICIT` authentication type enables users to create federated catalogs without explicitly
61-
providing authentication parameters to Polaris. When the authentication type is set to `IMPLICIT`,
62-
the authentication parameters are picked from the environment or configuration files.
63-
64-
- The `DEFAULT_LOCATION_OBJECT_STORAGE_PREFIX_ENABLED` feature was added to support placing tables
65-
at locations that better optimize for object storage.
66-
67-
- The `LIST_PAGINATION_ENABLED` (default: false) feature flag can be used to enable pagination
68-
in the Iceberg REST Catalog API.
69-
70-
- The Helm chart now supports Pod Disruption Budgets (PDBs) for Polaris components. This allows users to define
71-
the minimum number of pods that must be available during voluntary disruptions, such as node maintenance.
72-
73-
- Feature configuration `PURGE_VIEW_METADATA_ON_DROP` was added to allow dropping views without purging their metadata files.
74-
75-
- Introduced S3 path-style access support for improved compatibility with S3-compatible storage systems.
76-
77-
- Enhanced Python client with integration tests and improved error handling.
78-
79-
- Introduced extensible pagination token implementation for better API performance.
80-
81-
- Added support for `s3a` scheme in addition to existing S3 schemes.
82-
83-
- Enhanced Helm chart with support for external authentication configuration and relational JDBC backend options.
84-
85-
- Added comprehensive diagnostics and monitoring capabilities throughout the system.
86-
87-
- Introduced bootstrap command options to specify custom schema files for database initialization.
88-
89-
- Added refresh credentials endpoint configuration to LoadTableResponse for AWS, Azure, and GCP. Enabling
90-
automatic storage credential refresh per table on the client side. Java client version >= 1.8.0 is required.
91-
The endpoint path is always returned when using vended credentials, but clients must enable the
92-
refresh-credentials flag for the desired storage provider.
93-
9441
- Added a Management API endpoint to reset principal credentials, controlled by the `ENABLE_CREDENTIAL_RESET` (default: true) feature flag.
9542

9643
### Changes
9744

98-
- Polaris Management API clients must be prepared to deal with new attributes in `AwsStorageConfigInfo` objects.
99-
100-
- S3 configuration property role-ARN is no longer mandatory.
101-
10245
### Deprecations
10346

10447
* The property `polaris.active-roles-provider.type` is deprecated and has no effect anymore.
10548

10649
### Fixes
10750

51+
* Fixed incorrect Azure expires at field for the credentials refresh response, leading to client failure via #2633
52+
10853
### Commits
10954

55+
## [1.1.0-incubating]
56+
Apache Polaris 1.1.0-incubating was released on September 19th, 2025.
57+
- **Highlights**
58+
- **HMS Federation Support**: Added support for Hive Metastore (HMS) federation, enabling integration with existing Hive metastores.
59+
- **Modularized Federation**: Introduced modularized federation architecture to support multiple catalog types and improve extensibility.
60+
- **External Authentication**: Added comprehensive support for external identity providers including Keycloak integration and Helm chart configuration options.
61+
- **Python Client Distribution**: The Python client is now packaged and distributed as a proper Python package for easier installation and usage.
62+
- **Catalog Federation CLI**: Extended the CLI with support for managing federated catalogs, making it easier to configure and operate catalog federation.
63+
- **MinIO**: Added MinIO integration support with comprehensive getting started documentation.
64+
- **New features**
65+
- Added Catalog configuration for S3 and STS endpoints. This also allows using non-AWS S3 implementations.
66+
- The realm-level feature flag `ALLOW_SETTING_S3_ENDPOINTS` (default: true) may be used to disable this
67+
functionality.
68+
- The `IMPLICIT` authentication type enables users to create federated catalogs without explicitly
69+
providing authentication parameters to Polaris. When the authentication type is set to `IMPLICIT`,
70+
the authentication parameters are picked from the environment or configuration files.
71+
- The `DEFAULT_LOCATION_OBJECT_STORAGE_PREFIX_ENABLED` feature was added to support placing tables
72+
at locations that better optimize for object storage.
73+
- The `LIST_PAGINATION_ENABLED` (default: false) feature flag can be used to enable pagination
74+
in the Iceberg REST Catalog API.
75+
- The Helm chart now supports Pod Disruption Budgets (PDBs) for Polaris components. This allows users to define
76+
the minimum number of pods that must be available during voluntary disruptions, such as node maintenance.
77+
- Feature configuration `PURGE_VIEW_METADATA_ON_DROP` was added to allow dropping views without purging their metadata files.
78+
- Introduced S3 path-style access support for improved compatibility with S3-compatible storage systems.
79+
- Enhanced Python client with integration tests and improved error handling.
80+
- Introduced extensible pagination token implementation for better API performance.
81+
- Added support for `s3a` scheme in addition to existing S3 schemes.
82+
- Enhanced Helm chart with support for external authentication configuration and relational JDBC backend options.
83+
- Added comprehensive diagnostics and monitoring capabilities throughout the system.
84+
- Introduced bootstrap command options to specify custom schema files for database initialization.
85+
- Added refresh credentials endpoint configuration to LoadTableResponse for AWS, Azure, and GCP. Enabling
86+
automatic storage credential refresh per table on the client side. Java client version >= 1.8.0 is required.
87+
The endpoint path is always returned when using vended credentials, but clients must enable the
88+
refresh-credentials flag for the desired storage provider.
89+
- Added a Management API endpoint to reset principal credentials, controlled by the `ENABLE_CREDENTIAL_RESET` (default: true) feature flag.
90+
- **Changes**
91+
- Polaris Management API clients must be prepared to deal with new attributes in `AwsStorageConfigInfo` objects.
92+
- S3 configuration property role-ARN is no longer mandatory.
93+
- **Breaking changes**
94+
- Helm chart: the default value of the `authentication.tokenBroker.secret.symmetricKey.secretKey` property has changed
95+
from `symmetric.pem` to `symmetric.key`.
96+
- **Deprecations**
97+
- The property `polaris.active-roles-provider.type` is deprecated for removal.
98+
- The `ActiveRolesProvider` interface is deprecated for removal.
99+
110100
## [1.0.1-incubating]
111101
Apache Polaris 1.0.1-incubating was released on August 16th, 2025. It’s a maintenance release on the 1.0.0 release fixing a couple of issues on the Helm Chart:
112102
- remove db-kind in Helm Chart

client/python/pyproject.toml

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -62,40 +62,15 @@ mypy = ">=1.18, <=1.18.2"
6262
pyiceberg = "==0.10.0"
6363
pre-commit = "==4.3.0"
6464
openapi-generator-cli = "==7.11.0.post0"
65-
pip-licenses = "==5.0.0"
65+
pip-licenses-cli = "==v2.0.0"
6666
# pin virtualenv version to prevent poetry from upgrading to an incompatible version
6767
# see https://github.com/python-poetry/poetry/issues/10504#issuecomment-3176923981
6868
# 20.33.0 is the oldest version supported by poetry 2.2.0
6969
virtualenv = ">=20.33.0,<20.35.0"
7070

7171
[tool.pip-licenses]
72-
from-classifier = true
73-
# Packages with "UNKNOWN" licenses in pip-licenses metadata.
74-
# These have been manually verified and are known to be compatible with ASF.
75-
ignore-packages = [
76-
"anyio", # MIT License (MIT)
77-
"build", # MIT License (MIT)
78-
"CacheControl", # Apache-2.0
79-
"cffi", # MIT License (MIT)
80-
"click", # BSD-3-Clause
81-
"cryptography", # Apache-2.0 or BSD-3-Clause
82-
"fsspec", # BSD-3-Clause
83-
"jaraco.functools", # MIT License (MIT)
84-
"jeepney", # MIT License (MIT)
85-
"more-itertools", # MIT License (MIT)
86-
"mypy_extensions", # MIT License (MIT)
87-
"pyparsing", # MIT License (MIT)
88-
"RapidFuzz", # MIT License (MIT)
89-
"SecretStorage", # BSD-3-Clause
90-
"types-python-dateutil", # Apache-2.0
91-
"typing-inspection", # MIT License (MIT)
92-
"typing_extensions", # PSF-2.0
93-
"urllib3", # MIT License (MIT)
94-
"zipp", # MIT License (MIT)
95-
"zstandard", # BSD-3-Clause
96-
]
9772
partial-match = true
98-
allow-only = "MIT;Apache;BSD License;PSF-2.0;ISC;The Unlicense;Python Software Foundation License;Mozilla Public License"
73+
allow-only = "Apache;BSD License;BSD-3-Clause;ISC;MIT;Mozilla Public License;PSF-2.0;Python Software Foundation License;The Unlicense"
9974

10075
[build-system]
10176
requires = ["poetry-core>=2.0.0,<3.0.0", "openapi-generator-cli==7.11.0.post0"]

getting-started/telemetry/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ services:
6767
entrypoint: '/bin/sh -c "chmod +x /polaris/create-catalog.sh && /polaris/create-catalog.sh"'
6868

6969
prometheus:
70-
image: docker.io/prom/prometheus:v3.5.0
70+
image: docker.io/prom/prometheus:v3.6.0
7171
ports:
7272
- "9093:9090"
7373
depends_on:

gradle/libs.versions.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ checkstyle = "10.25.0"
2222
hadoop = "3.4.2"
2323
hive = "3.1.3"
2424
iceberg = "1.10.0" # Ensure to update the iceberg version in regtests to keep regtests up-to-date
25-
quarkus = "3.26.3"
25+
quarkus = "3.26.4"
2626
immutables = "2.11.3"
2727
jmh = "1.37"
2828
picocli = "4.7.7"
@@ -43,7 +43,7 @@ agrona = { module = "org.agrona:agrona", version = "2.2.4" }
4343
antlr4-runtime = { module = "org.antlr:antlr4-runtime", version.strictly = "4.9.3" } # spark integration tests
4444
assertj-core = { module = "org.assertj:assertj-core", version = "3.27.5" }
4545
auth0-jwt = { module = "com.auth0:java-jwt", version = "4.5.0" }
46-
awssdk-bom = { module = "software.amazon.awssdk:bom", version = "2.33.9" }
46+
awssdk-bom = { module = "software.amazon.awssdk:bom", version = "2.34.0" }
4747
awaitility = { module = "org.awaitility:awaitility", version = "4.3.0" }
4848
azuresdk-bom = { module = "com.azure:azure-sdk-bom", version = "1.2.38" }
4949
caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version = "3.2.2" }
@@ -52,7 +52,7 @@ commons-lang3 = { module = "org.apache.commons:commons-lang3", version = "3.18.0
5252
commons-text = { module = "org.apache.commons:commons-text", version = "1.14.0" }
5353
docker-java-api = { module = "com.github.docker-java:docker-java-api", version = "3.5.3" }
5454
eclipselink = { module = "org.eclipse.persistence:eclipselink", version = "4.0.7" }
55-
errorprone = { module = "com.google.errorprone:error_prone_core", version = "2.41.0" }
55+
errorprone = { module = "com.google.errorprone:error_prone_core", version = "2.42.0" }
5656
google-cloud-storage-bom = { module = "com.google.cloud:google-cloud-storage-bom", version = "2.57.0" }
5757
guava = { module = "com.google.guava:guava", version = "33.5.0-jre" }
5858
h2 = { module = "com.h2database:h2", version = "2.3.232" }
@@ -75,7 +75,7 @@ jakarta-persistence-api = { module = "jakarta.persistence:jakarta.persistence-ap
7575
jakarta-servlet-api = { module = "jakarta.servlet:jakarta.servlet-api", version = "6.1.0" }
7676
jakarta-validation-api = { module = "jakarta.validation:jakarta.validation-api", version = "3.1.1" }
7777
jakarta-ws-rs-api = { module = "jakarta.ws.rs:jakarta.ws.rs-api", version = "4.0.0" }
78-
jandex = { module = "io.smallrye.jandex:jandex", version ="3.4.0" }
78+
jandex = { module = "io.smallrye.jandex:jandex", version ="3.5.0" }
7979
javax-servlet-api = { module = "javax.servlet:javax.servlet-api", version = "4.0.1" }
8080
jcstress-core = { module = "org.openjdk.jcstress:jcstress-core", version = "0.16" }
8181
jmh-core = { module = "org.openjdk.jmh:jmh-core", version.ref = "jmh" }
@@ -86,8 +86,8 @@ localstack = { module = "org.testcontainers:localstack", version = "1.21.3" }
8686
logback-classic = { module = "ch.qos.logback:logback-classic", version = "1.5.18" }
8787
micrometer-bom = { module = "io.micrometer:micrometer-bom", version = "1.15.4" }
8888
microprofile-fault-tolerance-api = { module = "org.eclipse.microprofile.fault-tolerance:microprofile-fault-tolerance-api", version = "4.1.2" }
89-
mockito-core = { module = "org.mockito:mockito-core", version = "5.19.0" }
90-
mockito-junit-jupiter = { module = "org.mockito:mockito-junit-jupiter", version = "5.19.0" }
89+
mockito-core = { module = "org.mockito:mockito-core", version = "5.20.0" }
90+
mockito-junit-jupiter = { module = "org.mockito:mockito-junit-jupiter", version = "5.20.0" }
9191
mongodb-driver-sync = { module = "org.mongodb:mongodb-driver-sync", version = "5.6.0" }
9292
opentelemetry-bom = { module = "io.opentelemetry:opentelemetry-bom", version = "1.54.1" }
9393
opentelemetry-instrumentation-bom-alpha = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha", version= "2.19.0-alpha" }
@@ -102,7 +102,7 @@ scala212-lang-reflect = { module = "org.scala-lang:scala-reflect", version.ref =
102102
s3mock-testcontainers = { module = "com.adobe.testing:s3mock-testcontainers", version = "4.9.1" }
103103
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
104104
smallrye-common-annotation = { module = "io.smallrye.common:smallrye-common-annotation", version = "2.13.9" }
105-
smallrye-config-core = { module = "io.smallrye.config:smallrye-config-core", version = "3.13.4" }
105+
smallrye-config-core = { module = "io.smallrye.config:smallrye-config-core", version = "3.14.0" }
106106
smallrye-jandex = { module = "io.smallrye:jandex", version = "3.4.0" }
107107
spark35-sql-scala212 = { module = "org.apache.spark:spark-sql_2.12", version.ref = "spark35" }
108108
swagger-annotations = { module = "io.swagger:swagger-annotations", version.ref = "swagger" }

plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/PolarisSparkCatalog.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public Table loadTable(Identifier identifier) throws NoSuchTableException {
7878
}
7979

8080
@Override
81+
@SuppressWarnings({"deprecation", "RedundantSuppression"})
8182
public Table createTable(
8283
Identifier identifier,
8384
StructType schema,

plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/SparkCatalog.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@
5151
import org.apache.spark.sql.connector.expressions.Transform;
5252
import org.apache.spark.sql.types.StructType;
5353
import org.apache.spark.sql.util.CaseInsensitiveStringMap;
54-
import org.slf4j.Logger;
55-
import org.slf4j.LoggerFactory;
5654

5755
/**
5856
* SparkCatalog Implementation that is able to interact with both Iceberg SparkCatalog and Polaris
@@ -66,7 +64,6 @@ public class SparkCatalog
6664
SupportsNamespaces,
6765
ViewCatalog,
6866
SupportsReplaceView {
69-
private static final Logger LOG = LoggerFactory.getLogger(SparkCatalog.class);
7067

7168
@VisibleForTesting protected String catalogName = null;
7269
@VisibleForTesting protected org.apache.iceberg.spark.SparkCatalog icebergsSparkCatalog = null;

polaris-core/src/main/java/org/apache/polaris/core/storage/StorageAccessProperty.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.polaris.core.storage;
2020

2121
import org.apache.iceberg.aws.AwsClientProperties;
22+
import org.apache.iceberg.azure.AzureProperties;
2223
import org.apache.iceberg.gcp.GCPProperties;
2324

2425
/**
@@ -69,7 +70,7 @@ public enum StorageAccessProperty {
6970
AZURE_SAS_TOKEN(String.class, "adls.sas-token.", "an azure shared access signature token"),
7071
AZURE_REFRESH_CREDENTIALS_ENDPOINT(
7172
String.class,
72-
"adls.refresh-credentials-endpoint",
73+
AzureProperties.ADLS_REFRESH_CREDENTIALS_ENDPOINT,
7374
"the endpoint to load vended credentials for a table from the catalog",
7475
false,
7576
false),
@@ -78,6 +79,12 @@ public enum StorageAccessProperty {
7879
"expiration-time",
7980
"the expiration time for the access token, in milliseconds",
8081
true,
82+
true),
83+
AZURE_SAS_TOKEN_EXPIRES_AT_MS_PREFIX(
84+
Long.class,
85+
AzureProperties.ADLS_SAS_TOKEN_EXPIRES_AT_MS_PREFIX,
86+
"The expiration time for the access token, in milliseconds",
87+
true,
8188
true);
8289

8390
private final Class valueType;

polaris-core/src/main/java/org/apache/polaris/core/storage/azure/AzureCredentialsStorageIntegration.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ static AccessConfig toAccessConfig(
182182
Instant expiresAt,
183183
Optional<String> refreshCredentialsEndpoint) {
184184
AccessConfig.Builder accessConfig = AccessConfig.builder();
185-
handleAzureCredential(accessConfig, sasToken, storageDnsName);
185+
handleAzureCredential(accessConfig, sasToken, storageDnsName, expiresAt);
186186
accessConfig.put(
187187
StorageAccessProperty.EXPIRATION_TIME, String.valueOf(expiresAt.toEpochMilli()));
188188
refreshCredentialsEndpoint.ifPresent(
@@ -193,8 +193,11 @@ static AccessConfig toAccessConfig(
193193
}
194194

195195
private static void handleAzureCredential(
196-
AccessConfig.Builder config, String sasToken, String host) {
196+
AccessConfig.Builder config, String sasToken, String host, Instant expiresAt) {
197197
config.putCredential(StorageAccessProperty.AZURE_SAS_TOKEN.getPropertyName() + host, sasToken);
198+
config.putCredential(
199+
StorageAccessProperty.AZURE_SAS_TOKEN_EXPIRES_AT_MS_PREFIX.getPropertyName() + host,
200+
String.valueOf(expiresAt.toEpochMilli()));
198201

199202
// Iceberg 1.7.x may expect the credential key to _not_ be suffixed with endpoint
200203
if (host.endsWith(AzureLocation.ADLS_ENDPOINT)) {

0 commit comments

Comments
 (0)