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]
