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]

Reply via email to