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]

Reply via email to