JingsongLi opened a new pull request, #1020: URL: https://github.com/apache/paimon-rust/pull/1020
### Purpose Complete the Java `PostponeBucketWriter` contract used by native Python writes. Follow-up to #1017. Pending files must retain event order and duplicate keys, while the first retract still needs validation by the configured merge function. Managed Blob fields also need the existing pack/reference lifecycle on this path. ### Brief change log - Add a dedicated first-retract validator for deduplicate, first-row, partial-update and aggregation. Bypass the singleton reducer shortcut when validating the raw merge function, matching Java. - Retain postpone writer state across stream checkpoints so retract validation runs once per partition writer and arrival sequences continue across prepares. - Share managed Blob write state through bucket paths and value fields rather than coupling it to `KeyValueWriteConfig`. Pending writers now externalize scalar/ARRAY/MAP Blob values, discard retract payloads, produce `.blobref` sidecars, finish packs before handoff, and abort all unprepared resources on failure. - Disable scan LIMIT pruning when a managed Blob payload predicate is deferred until descriptor resolution. Otherwise an earlier bucket can consume the scan hint before a later bucket's matching payload is read. - Cover raw event ordering, all merge engines, first-retract state across checkpoints, nested/null/duplicate-key Blob values, pack ownership and payload filters across multiple buckets. ### Tests - `cargo test --locked -p paimon --lib table::`: 1747 passed, 3 ignored (includes 20 managed Blob tests). - `cargo test --locked -p paimon --test postpone_native_write_test`: 5 passed. - `cargo clippy --locked --all-targets --workspace --features fulltext,vortex -- -D warnings`: passed. - `cargo fmt --all -- --check`: passed. - Rebuilt Python bindings and ran the corresponding PyPaimon native writer suites: 257 passed, with native plan/read/write/commit paths exercised. Managed Blob coverage uses Rust table creation and forces Rust reads/writes. ### API and Format No public API or wire-format changes. Postpone uses the existing Java-compatible managed Blob packs and reference sidecars. Existing ordinary key-value writer behavior is preserved. ### Documentation The implementation references Java's current `PostponeBucketWriter` and documents the unwrapped retract validation and scan-limit constraint. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
