Repository navigation
[core] Support REST catalog branch management - #1141
Merged
Merged
Conversation
This was referenced Oct 17, 2026
sundapeng
added a commit
to sundapeng/paimon
that referenced
this pull request
Oct 17, 2026
apache/paimon-rust#1141 made the Rust REST client retry GET requests on HTTP 429 and 503, as Java does. Native CI builds pypaimon-rust from paimon-rust main, so four tests that answer the snapshot request with 503 and expect a single call now see six and fail on master. They check that search does not retry on its own, not HTTP retries, so answer with the non-retryable 500 instead.
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.
Purpose
PyPaimon already supports REST branch creation, listing, deletion and fast-forward. Add the missing Rust Catalog, RESTApi and Native binding capabilities, following Java's RESTCatalog and RESTApi contracts.
Changes
Catalog::{create_branch, drop_branch, fast_forward, list_branches}with unsupported defaults and a REST implementation. Use Java's endpoints,branch/fromTagpayload, empty forward request, nullable branch-list response, ordering and operation-specific errors.PaimonCatalogmethods that accept string/tuple identifiers and release the GIL.config_required=Falsereuses resolved REST configuration without fetching/configagain.CatalogErrorfields so PyPaimon can retain its public exception types. Preserve missing JSON status codes, unknown HTTP errors and transport errors; keepForkSafetyErrordistinct.ACS4-HMAC-SHA256) in Rust core, selected bydlf.signing-algorithm=openapi-v4. Port Java's canonical request, RFC 3986 query encoding, payload hash, credential scope and 61 action mappings. Existing signing algorithms remain available.Verification
-D warnings, rustfmt, changed-file flake8 andgit diff --check: passed.Repeated independent review and regression testing covered Java parity, V4 signatures, credential caching/refresh, header collisions, GET retries, transport errors and uncertain publication. V4 integration independently recomputes wire MACs with the Python signer while guarding against Python operation fallback. Paimon REST authenticates each request; no cross-client cookie/session synchronization or response observation API is introduced.
PyPaimon's mock server acknowledges fast-forward; request semantics are verified against Java and Rust protocol tests. This does not claim to test a production server's snapshot-switching implementation.