Skip to content

Iceberg REST Phase 1 [3/3]: Client and integration validation - #500

Closed
cbb330 wants to merge 1 commit into
linkedin:chbush/iceberg-rest-2-controllerfrom
cbb330:chbush/iceberg-rest-3-tests
Closed

cbb330 wants to merge 1 commit into
linkedin:chbush/iceberg-rest-2-controllerfrom
cbb330:chbush/iceberg-rest-3-tests

Conversation

@cbb330

@cbb330 cbb330 commented Mar 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

Part 3 of 3 for a read-only Iceberg REST Catalog facade.

This PR validates the facade with stock Iceberg clients. It does not change runtime behavior. Java RESTCatalog round-trips, a PyIceberg smoke test, and CI wiring live here; unit coverage for the facade is in #499.

Changes

  • Client-facing API Changes
  • Internal API Changes
  • Bug Fixes
  • New Features
  • Performance Improvements
  • Code Style
  • Refactoring
  • Documentation
  • Tests

Tests

IcebergRestCatalogRoundTripTest creates tables through the existing OpenHouse API and reads them through Iceberg's RESTCatalog:

  • Config advertises only the three implemented table operations.
  • List tables: namespace isolation, empty namespaces, and opaque pageToken / pageSize pagination.
  • Load table: schema, field IDs, required/optional fields, partition spec, sort order, location, and properties.
  • HEAD existence for present, missing, and wrong-namespace tables.
  • Missing tables and namespaces raise Iceberg NoSuchTableException.
  • Invalid prefixes return 400; snapshots=refs returns 501.
  • Existing OpenHouse GET /v1/databases/{db}/tables/{table} still works.
  • Table loads retain existing read audit attribution and increment http.server.requests.

CI:

  • integrations/python/dataloader/scripts/iceberg_rest_catalog_smoke.py creates a table via OpenHouse and reads it with PyIceberg RestCatalog.
  • .github/workflows/build-run-tests.yml runs :services:tables:check and that smoke test against docker-compose.

This PR itself changes only those three files. The GitHub files tab against main also includes #498 and #499.

Testing Done

  • Manually Tested on local docker setup. Please include commands ran, and their output.
  • Added new tests for the changes made.
  • Updated existing tests to reflect the changes made.
  • No tests added or updated. Please explain why. If unsure, please feel free to ask for help.
  • Some other form of testing like staging or soak time in production. Please explain.

Validated locally with JDK 17:

./gradlew :services:tables:check
python3 -m py_compile integrations/python/dataloader/scripts/iceberg_rest_catalog_smoke.py

The Java round-trip suite passes, including pagination, capabilities, existing-API regression, audit, and metrics checks. The Docker/PyIceberg smoke test is exercised by CI, not re-run locally for this update.

Additional Information

  • Breaking Changes
  • Deprecations
  • Large PR broken into smaller PRs, and PR plan linked in the description.

Merge in order:

  1. Iceberg REST Phase 1 [1/3]: Read-only contract and codegen #498 — Read-only contract and codegen
  2. Iceberg REST Phase 1 [2/3]: Runtime facade and unit coverage #499 — Runtime facade and unit coverage
  3. Iceberg REST Phase 1 [3/3]: Client and integration validation #500 — Client and integration validation ← you are here

Exercise the read-only facade with Java and PyIceberg clients in CI, including pagination, compatibility, auditing, metrics, and existing API regressions.
@cbb330
cbb330 force-pushed the chbush/iceberg-rest-3-tests branch from 4896bad to 835f36d Compare August 21, 2026 05:33
@cbb330 cbb330 changed the title Iceberg REST Phase 1 [3/3]: Tests and CI Iceberg REST Phase 1 [3/3]: Client and integration validation Aug 21, 2026
@cbb330
cbb330 changed the base branch from main to chbush/iceberg-rest-2-controller August 21, 2026 05:44
@cbb330

cbb330 commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

Superseded by the same-repo GitHub stack (fork heads cannot be added to GitHub stacks):

  1. Iceberg REST Phase 1 [1/3]: Read-only contract and codegen #689
  2. Iceberg REST Phase 1 [2/3]: Runtime facade and unit coverage #690
  3. Iceberg REST Phase 1 [3/3]: Client and integration validation #691

Closing in favor of that stack.

@cbb330

cbb330 commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

Closing in favor of stacked PRs #689 / #690 / #691.

@cbb330 cbb330 closed this Aug 21, 2026
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.

1 participant