XiaoHongbo-Hope opened a new pull request, #10768: URL: https://github.com/apache/paimon/pull/10768
### Purpose Prevent automatic write-conflict recovery from destructively rolling back a committed COMPACT snapshot in Java and Python. A reader can create and successfully read a tag for a completed compaction before a conflicting writer attempts recovery. The writer's automatic rollback then removes that snapshot and its tag, so the reader's next access fails with `Tag 'published' doesn't exist`. Checking for tags on the client would still race with tag creation and would not protect untagged active readers. Unresolved conflicts now propagate to the caller without invoking table rollback. Python's row-ID rewrite path remains available before the conflict is raised; the Ray self-update test verifies that retry/replanning can still finish the update while preserving the tagged version. Explicit user-requested rollback semantics are unchanged. This intentionally trades some automatic conflict recovery for preservation of already published versions: callers without a safe rewrite/replan path must retry from a fresh read. Existing rollback helper/protocol types and constructor parameters are retained in this focused fix. Deploying this change requires upgrading writers; it does not change the behavior of older clients. ### Tests - Added a Java integration regression with actual writes, compaction, a tag, and a conflicting partial update. With the original commit code it fails with `Tag 'published' doesn't exist`; with the fix it verifies the tag, snapshot, and tagged data remain readable and no rollback is called. - Java regression plus the existing same-column update and compaction conflict tests: 3 passed, with normal Maven checks enabled (without `fast-build`). - Python file-store commit suite: 29 tests and 10 subtests passed. The new unresolved-conflict assertion fails on the original code and passes with the fix. - Ray self-update compaction-race test: passed, including retained tag/snapshot and successful updated rows. - Java Spotless and Python Flake8 checks passed; `git diff --check` passed. Java command: ``` mvn -B -ntp -pl paimon-core -am -DfailIfNoTests=false '-Dtest=DataEvolutionTableTest#testConflictingWriterPreservesTaggedCompaction+testConcurrentSameColumnPartialUpdateConflict+testSmallFileCompactConflictsWithConcurrentPartialUpdate' -DwildcardSuites=none test ``` -- 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]
