Skip to content

Commit 78a1aa2

Browse files
authored
Merge branch 'main' into ahemani/event_instrumentation_iceberg_rest
2 parents f3ef8df + 9648582 commit 78a1aa2

File tree

96 files changed

+1138
-463
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+1138
-463
lines changed

.github/actions/ci-incr-build-cache-prepare/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ runs:
4545
fi
4646
4747
- name: Gradle / Setup
48-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
48+
uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4
4949
with:
5050
cache-read-only: ${{ inputs.cache-read-only }}
5151
validate-wrappers: false

.github/workflows/gradle.yml

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,13 @@ jobs:
4646
with:
4747
java-version: '21'
4848
distribution: 'temurin'
49-
- name: Setup Gradle
50-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
51-
with:
52-
validate-wrappers: false
5349
- name: Prepare Gradle build cache
5450
uses: ./.github/actions/ci-incr-build-cache-prepare
5551
- name: Run unit tests
5652
env:
5753
# publishToMavenLocal causes a GH API requests, use the token for those requests
5854
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
55+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
5956
run: |
6057
./gradlew check sourceTarball distTar distZip publishToMavenLocal \
6158
-x :polaris-runtime-service:test \
@@ -87,13 +84,11 @@ jobs:
8784
with:
8885
java-version: '21'
8986
distribution: 'temurin'
90-
- name: Setup Gradle
91-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
92-
with:
93-
validate-wrappers: false
9487
- name: Prepare Gradle build cache
9588
uses: ./.github/actions/ci-incr-build-cache-prepare
9689
- name: Run Quarkus tests
90+
env:
91+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
9792
run: |
9893
./gradlew \
9994
:polaris-runtime-service:test \
@@ -125,14 +120,12 @@ jobs:
125120
with:
126121
java-version: '21'
127122
distribution: 'temurin'
128-
- name: Setup Gradle
129-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
130-
with:
131-
validate-wrappers: false
132123
- name: Prepare Gradle build cache
133124
uses: ./.github/actions/ci-incr-build-cache-prepare
134125
- name: Run integration tests
135126
run: ./gradlew intTest --continue
127+
env:
128+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
136129
- name: Save partial Gradle build cache
137130
uses: ./.github/actions/ci-incr-build-cache-save
138131
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
@@ -163,14 +156,13 @@ jobs:
163156
with:
164157
java-version: '21'
165158
distribution: 'temurin'
166-
- name: Setup Gradle
167-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
168-
with:
169-
validate-wrappers: false
170159
- name: Collect partial Gradle build caches
171160
uses: ./.github/actions/ci-incr-build-cache-prepare
172161
with:
173162
cache-read-only: false
174163
- name: Trigger Gradle home cleanup
164+
env:
165+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
175166
run: ./gradlew --no-daemon :showVersion
167+
176168
# Note: the "Post Gradle invocation" archives the updated build cache.

.github/workflows/helm.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ jobs:
8383
minikube docker-env
8484
8585
- name: Image build
86+
env:
87+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
8688
run: |
8789
eval $(minikube -p minikube docker-env)
8890
./gradlew \

.github/workflows/nightly.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@ jobs:
5252
with:
5353
java-version: '21'
5454
distribution: 'temurin'
55-
- name: Setup Gradle
56-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
57-
with:
58-
validate-wrappers: false
55+
56+
- name: Prepare Gradle build cache
57+
uses: ./.github/actions/ci-incr-build-cache-prepare
5958
- name: Publish SNAPSHOTs to Apache Nexus Repository
6059
run: ./gradlew publishToApache
6160
env:
6261
# publishToApache causes a GH API requests, use the token for those requests
6362
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6463
ORG_GRADLE_PROJECT_apacheUsername: ${{ secrets.NEXUS_USER }}
65-
ORG_GRADLE_PROJECT_apachePassword: ${{ secrets.NEXUS_PW }}
64+
ORG_GRADLE_PROJECT_apachePassword: ${{ secrets.NEXUS_PW }}
65+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}

.github/workflows/python-client.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
runs-on: ubuntu-latest
3939
strategy:
4040
matrix:
41-
python-version: ["3.9", "3.10", "3.11"]
41+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
4242

4343
steps:
4444
- name: Checkout Polaris project
@@ -59,11 +59,17 @@ jobs:
5959
run: |
6060
make client-lint
6161
62+
- name: License Compliance Check
63+
run: |
64+
make client-license-check
65+
6266
- name: Generated Client Tests
6367
run: |
6468
make client-unit-test
6569
6670
- name: Image build
71+
env:
72+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
6773
run: |
6874
./gradlew \
6975
:polaris-server:assemble \
@@ -74,6 +80,6 @@ jobs:
7480
run: |
7581
make client-integration-test
7682
77-
- name: Run Polaris Client help maual
83+
- name: Run Polaris Client help manual
7884
run: |
7985
./polaris --help

.github/workflows/regtest.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,15 @@ jobs:
4040
java-version: '21'
4141
distribution: 'temurin'
4242

43-
- name: Setup Gradle
44-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
45-
with:
46-
validate-wrappers: false
47-
4843
- name: Prepare Gradle build cache
4944
uses: ./.github/actions/ci-incr-build-cache-prepare
5045

5146
- name: Fix permissions
5247
run: mkdir -p regtests/output && chmod 777 regtests/output && chmod 777 regtests/t_*/ref/*
5348

5449
- name: Image build
50+
env:
51+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
5552
run: |
5653
./gradlew \
5754
:polaris-server:assemble \

.github/workflows/spark_client_regtests.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,6 @@ jobs:
4040
java-version: '21'
4141
distribution: 'temurin'
4242

43-
- name: Setup Gradle
44-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
45-
with:
46-
validate-wrappers: false
47-
4843
- name: Prepare Gradle build cache
4944
uses: ./.github/actions/ci-incr-build-cache-prepare
5045

@@ -55,9 +50,12 @@ jobs:
5550
env:
5651
# publishToMavenLocal causes a GH API requests, use the token for those requests
5752
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
53+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
5854
run: ./gradlew assemble publishToMavenLocal
5955

6056
- name: Image build
57+
env:
58+
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
6159
run: |
6260
./gradlew \
6361
:polaris-server:assemble \

CHANGELOG.md

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ request adding CHANGELOG notes for breaking (!) changes and possibly other secti
4141

4242
- **MinIO**: Added MinIO integration support with comprehensive getting started documentation.
4343

44-
### Upgrade notes
44+
### Upgrade Notes
4545

46-
### Breaking changes
46+
### Breaking Changes
4747

4848
- Helm chart: the default value of the `authentication.tokenBroker.secret.symmetricKey.secretKey` property has changed
4949
from `symmetric.pem` to `symmetric.key`.
@@ -105,9 +105,45 @@ refresh-credentials flag for the desired storage provider.
105105

106106
### Commits
107107

108-
## [1.0.0-incubating]
108+
## [1.0.1-incubating]
109+
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:
110+
- remove db-kind in Helm Chart
111+
- add relational-jdbc to helm
112+
109113

110-
- TODO: backfill 1.0.0 release notes
114+
## [1.0.0-incubating]
115+
Apache Polaris 1.0.0-incubating was released on July 9th, 2025.
116+
117+
- **Highlights**
118+
- First release ready for real-world workloads after the public beta 0.9.0
119+
- **Binary distribution** – first release with single downloadable .tgz or .zip artifact.
120+
- **Helm Chart** – debut of an official Helm chart for seamless Kubernetes deployment
121+
- **New features & enhancements**
122+
- **Policy Store** — persistence with schema evolution, built‑in TMS policies (Data compaction, Snapshot expiry, etc) and REST CRUD endpoints
123+
- **Postgres JDBC persistence** — native JDBC backend with robust support for concurrent changes.
124+
- **Rollback Compaction on Conflicts** - makes Polaris smarter, to revert the compaction commits in case of crunch to let the writers who are actually adding or removing the data to the table succeed. In a sense treating compaction as always a lower priority process.
125+
- **Enhanced runtime** — new runtime powered by Quarkus delivers out‑of‑the‑box Kubernetes readiness, quick startup, OIDC integration, and many other benefits. Polaris server and admin tool are now using Quarkus as a runtime framework.
126+
- **HTTP caching via ETag** — the loadTable endpoint supports ETag, reducing bandwidth and improving perceived latency
127+
- **Support for external identity providers (IdP)** — Polaris can now be its own IdP, delegate to an external IdP, or both
128+
- **Snapshot filtering** – clients can choose to load only referenced snapshots
129+
- **Catalog Federation (experimental)** – federate requests to an external Iceberg REST or Hadoop Catalog
130+
- **Generic Tables (experimental)** — serve multiple table formats besides Iceberg tables; initial Spark 3.5 plugin supports Delta Lake
131+
- **Event Listener framework (experimental)** — subscribe to catalog events (AfterTableCommitedEvent, BeforeViewCommitedEvent, etc)
132+
- **Notable bug fixes**
133+
- **CLI and Python Client improvements** – Support for new features, CLI repair, changes to the update subcommand, and various fixes
134+
- **Safe configurations** – Catalog-level Polaris configurations follow a strict naming convention to avoid name clashes with user-provided configuration entries. Legacy Polaris configuration names are still supported in 1.0 to allow existing deployments to migrate without rush.
135+
- **TableOperations optimizations** – Changes to BasePolarisTableOperations result in less traffic to object storage during commits
136+
- **Bounded entity cache** – The entity cache is now more memory-aware and less likely to lead to OOMs
137+
- **Bootstrapping fixes** – Users can more easily bootstrap a new realm. Root credentials can be provided by the user or generated by Polaris (and returned to the user).
138+
- **Breaking changes**
139+
- **Server Configuration** – The format used to configure the Polaris service in 0.9 has changed with the migration to Quarkus and changes to configurations
140+
- **Bootstrap Flow** – The bootstrap flow used in 0.9 has changed with the migration to Quarkus and the new admin tool
141+
142+
143+
## [0.9.0-incubating]
144+
Apache Polaris 0.9.0 was released on March 11, 2025 as the first Polaris release. Only the source distribution is available for this release.
111145

112146
[Unreleased]: https://github.com/apache/polaris/commits
147+
[1.0.1-incubating]: https://github.com/apache/polaris/releases/tag/apache-polaris-1.0.1-incubating
113148
[1.0.0-incubating]: https://github.com/apache/polaris/releases/tag/apache-polaris-1.0.0-incubating-rc2
149+
[0.9.0-incubating]: https://github.com/apache/polaris/releases/tag/apache-polaris-0.9.0-incubating

Makefile

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,16 @@ client-integration-test: client-setup-env ## Run client integration tests
162162
@echo "Tearing down Docker Compose services..."
163163
@$(DOCKER) compose -f $(PYTHON_CLIENT_DIR)/docker-compose.yml down || true # Ensure teardown even if tests fail
164164

165+
.PHONY: client-license-check
166+
client-license-check: client-setup-env ## Run license compliance check
167+
@echo "--- Starting license compliance check ---"
168+
@$(ACTIVATE_AND_CD) && pip-licenses
169+
@echo "--- License compliance check complete ---"
170+
165171
.PHONY: client-build
166172
client-build: client-setup-env ## Build client distribution
167173
@echo "--- Building client distribution ---"
168-
@$(ACTIVATE_AND_CD) && poetry build -f wheel
174+
@$(ACTIVATE_AND_CD) && poetry build
169175
@echo "--- Client distribution build complete ---"
170176

171177
.PHONY: client-cleanup

README.md

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
Apache Polaris™ is an open-source, fully-featured catalog for Apache Iceberg™. It implements Iceberg's
2323
[REST API](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml),
2424
enabling seamless multi-engine interoperability across a wide range of platforms, including Apache Doris™, Apache Flink®,
25-
Apache Spark™, StarRocks, and Trino.
25+
Apache Spark™, Dremio® OSS, StarRocks, and Trino.
2626

2727
Documentation is available at https://polaris.apache.org. The REST OpenAPI specifications are available here:
2828
[Polaris management API doc](https://editor-next.swagger.io/?url=https://raw.githubusercontent.com/apache/polaris/refs/heads/main/spec/polaris-management-service.yml)
@@ -42,11 +42,11 @@ Click [here](https://polaris.apache.org/in-dev/unreleased/) for a quick overview
4242
## Quickstart
4343
Click [here](https://polaris.apache.org/in-dev/unreleased/getting-started/install-dependencies/) for the quickstart experience, which will help you set up a Polaris instance locally or on any supported cloud provider.
4444

45-
## Building and Running
45+
## Project Structure
4646

4747
Apache Polaris is organized into the following modules:
4848

49-
- `polaris-core` - The main Polaris entity definitions and core business logic
49+
- [`polaris-core`](./polaris-core/README.md) - The main Polaris entity definitions and core business logic
5050
- API modules (implementing the Iceberg REST API and Polaris management API):
5151
- `polaris-api-management-model` - The Polaris management model
5252
- `polaris-api-management-service` - The Polaris management service
@@ -59,13 +59,15 @@ Apache Polaris is organized into the following modules:
5959
- Persistence modules:
6060
- `polaris-eclipselink` - The Eclipselink implementation of the MetaStoreManager interface
6161
- `polaris-relational-jdbc` - The JDBC implementation of BasePersistence to be used via AtomicMetaStoreManager
62-
62+
63+
## Building and Running
64+
6365
Apache Polaris is built using Gradle with Java 21+ and Docker 27+.
6466

6567
- `./gradlew build` - To build and run tests. Make sure Docker is running, as the integration tests depend on it.
6668
- `./gradlew assemble` - To skip tests.
6769
- `./gradlew check` - To run all checks, including unit tests and integration tests.
68-
- `./gradlew run` - To run the Polaris server locally; the server is reachable at localhost:8181. This is also suitable for running regression tests, or for connecting with Spark. Set your own credentials by specifying system property `./gradlew run -Dpolaris.bootstrap.credentials=POLARIS,root,s3cr3t` where:
70+
- `./gradlew run` - To run the Polaris server locally; the server is reachable at localhost:8181. This is also suitable for running regression tests, or for connecting with Spark. Set your own credentials by specifying system property `./gradlew run -Dpolaris.bootstrap.credentials=POLARIS,root,secret` where:
6971
- `POLARIS` is the realm
7072
- `root` is the CLIENT_ID
7173
- `secret` is the CLIENT_SECRET
@@ -136,6 +138,19 @@ Default configuration values can be found in `runtime/defaults/src/main/resource
136138
```
137139
- See [README in `site/`](site/README.md) for more information.
138140

141+
#### Publishing Build Scans to develocity.apache.org
142+
143+
All authenticated builds of Apache Polaris will automatically publish build scans to the ASF Develocity instance at
144+
[develocity.apache.org](https://develocity.apache.org/scans?search.rootProjectNames=polaris).
145+
146+
CI builds originating from the `apache/polaris` repository will have access to the Apache organization-level secret
147+
`DEVELOCITY_ACCESS_KEY` and publish build scans using the secret. CI builds originating from pull requests from forks
148+
will not have access to the secret and will silently skip build scan publication.
149+
150+
Apache committers can publish build scans from their local machine by
151+
[provisioning an access key](https://docs.gradle.com/develocity/gradle-plugin/current/#automated_access_key_provisioning)
152+
using ASF LDAP credentials. Builds by anonymous, unauthenticated contributors will silently skip build scan publication.
153+
139154
## License
140155

141156
Apache Polaris is under the Apache License Version 2.0. See the [LICENSE](LICENSE).

0 commit comments

Comments
 (0)