Conversation
This was referenced Mar 11, 2026
cbb330
force-pushed
the
chbush/iceberg-rest-2-controller
branch
6 times, most recently
from
March 11, 2026 23:38
85b9ba0 to
c2161a8
Compare
Implement the read-only Iceberg REST Catalog surface on top of the
generated OpenAPI interfaces from PR1:
Controller (IcebergRestCatalogController):
- Implements CatalogApiApi + ConfigurationApiApi generated interfaces
- GET /v1/config returns prefix override for route isolation
- GET /v1/{prefix}/namespaces/{ns}/tables lists tables via TablesService
- GET /v1/{prefix}/namespaces/{ns}/tables/{t} loads table via CatalogHandlers
- HEAD /v1/{prefix}/namespaces/{ns}/tables/{t} checks table existence
- All unimplemented endpoints return 501 via generated defaults
Serialization:
- IcebergRestHttpMessageConverter for Iceberg REST types (kebab-case JSON)
- IcebergRestSerde with Iceberg RESTSerializers + kebab-case ObjectMapper
- IcebergRestSerdeConfig registers converter without affecting existing Jackson
Error handling:
- IcebergRestExceptionHandler scoped to controller, returns Iceberg ErrorResponse
Service:
- TablesService.searchTables(databaseId, actingPrincipal) overload for auth
Keep the generated controller transport-only while delegating through a protocol handler that preserves existing table behavior, errors, auditing, and rollout controls.
cbb330
force-pushed
the
chbush/iceberg-rest-2-controller
branch
from
August 21, 2026 05:30
c2161a8 to
1872e5d
Compare
This was referenced Aug 21, 2026
Collaborator
Author
|
Superseded by the same-repo GitHub stack (fork heads cannot be added to GitHub stacks):
Closing in favor of that stack. |
Collaborator
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Part 2 of 3 for a read-only Iceberg REST Catalog facade.
This PR implements the generated contract as a thin Spring MVC adapter. Protocol translation lives in
IcebergRestApiHandler; existing OpenHouse table behavior is reused, not rewritten. The facade is disabled by default.Changes
Client-facing API Changes
When
cluster.tables.iceberg-rest.enabled=true:GET /v1/configreturns prefixicebergand advertises only the implemented endpoints.GET /v1/iceberg/namespaces/{namespace}/tableslists tables with opaque pagination.GET /v1/iceberg/namespaces/{namespace}/tables/{table}loads Iceberg table metadata.HEAD /v1/iceberg/namespaces/{namespace}/tables/{table}checks existence.Existing OpenHouse
/v1/databases/...APIs are unchanged. Unsupported Iceberg REST operations are not generated or advertised.Internal API Changes
IcebergRestCatalogControllerimplements the generated interfaces and delegates toIcebergRestApiHandler.OpenHouseIcebergRestApiHandlerreusesTablesApiHandlerfor authorization/validation andOpenHouseInternalCatalogfor IcebergLoadTableResponse.TablesServiceis unchanged. The earlier principal-aware list overload is removed; listing now uses the existing paginated handler path.ErrorResponseenvelopes and sanitizes 403/500 messages.New Features
cluster.tables.iceberg-rest.enabled(defaultfalse), also onClusterProperties.snapshots=refs.Refactoring
Documentation
docs/iceberg-rest-catalog.mdcovering enablement, architecture, limitations, observability, and spec maintenance.Tests
Testing Done
Validated locally with JDK 17:
That includes the new controller, handler, and feature-flag tests. Client round-trips and the PyIceberg CI smoke test are in #500.
Review this PR's two runtime commits after #498. Because the GitHub files tab is against
main, it also includes #498.Additional Information
Merge in order: