JingsongLi opened a new pull request, #969:
URL: https://github.com/apache/paimon-rust/pull/969

   ## Summary
   
   Complete the Rust core gaps exposed when enabling every native switch in 
PyPaimon update CI (apache/paimon#10185), in one PR.
   
   The original Native CI run had 7056 passing tests and 8 failures, all in 
deletion-vector path tests. Enabling partitioned incremental updates also 
exposed the existing rejection of unchanged partition columns.
   
   - Write deletion vectors to configured bucket external paths or 
`global-index.external-path`, and persist the actual location in 
`IndexFileMeta.external_path`. Match Java's location precedence, round-robin, 
specific-fs, weight-robin and entropy-inject strategies, including Guava's 
entropy hash and comma-list parsing.
   - Reuse the existing legacy `table/index` DV resolver when preparing a 
subsequent delete. Keep the original manifest identity in removal entries, and 
always honor explicit external paths even after output options change.
   - Clean up staged deletion-vector files when a later bucket or output write 
fails.
   - Allow row-ID update inputs to carry unchanged partition columns. Normalize 
them using the existing core conversion rules and compare against typed 
partition metadata before writing any files. Reject actual partition moves; 
preserve SQL assignment restrictions, overlap checks, and prior staged messages.
   - Match complete-row upserts within each partition, even when the caller 
omits partition columns from the upsert keys. Keep source last-write-wins and 
target fan-out semantics in core.
   
   No new public factory or Python-side execution engine is introduced. 
TIME/TIMESTAMP upsert key types and unsupported legacy partition layouts retain 
their existing limitations.
   
   ## Verification
   
   - PyPaimon update, incremental row-ID, key-upsert, deletion-vector paths, 
native writer, Ray update and global-index update suites with all five native 
flags enabled: **853 passed**, **26 subtests passed**. Counts: row-ID 134, 
grouped 51, predicate 58, upsert 84, incremental 9; native plans 716, reads 
1014, writes 19, commits 2.
   - Core `table_update_test`: **21 passed**; new `table_update_paths_test`: 
**7 passed**, including all external path strategies, repeated deletes, 
historical reads, explicit-path precedence, abort, legacy manifest identity, 
nullable/composite partitions and failure atomicity.
   - External-path unit selection: **19 passed**.
   - DataFusion UPDATE/MERGE/append MERGE: **83 passed**.
   - `cargo clippy --locked -p pypaimon_rust -p paimon --all-targets -- -D 
warnings`, formatting and diff checks passed.
   - Independent reviews covered partition semantics and DV 
persistence/cleanup. Corrected both reproduced configuration parsing findings 
before submission.
   
   The paired Python PR activates these capabilities and pins its Native CI 
build to this Rust revision. Hosted CI on this new revision is tracked 
separately from the local results above.
   


-- 
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