Core, Spark: Fix incorrect partial commit failure count in rewrite data files#16970
Open
john801205 wants to merge 3 commits into
Open
Core, Spark: Fix incorrect partial commit failure count in rewrite data files#16970john801205 wants to merge 3 commits into
john801205 wants to merge 3 commits into
Conversation
…ta files The rewrite data files procedure reported partial commit failures even when all commits succeeded, because it derived the total commit count as min(totalGroupCount, maxCommits). When groups are batched into groupsPerCommit = ceil(totalGroupCount / maxCommits) per commit, the actual number of commits is ceil(totalGroupCount / groupsPerCommit), which can be smaller. The mismatch made totalCommits - succeededCommits positive even with zero failures. Compute totalCommits as ceil(totalGroupCount / groupsPerCommit) so the failed commit count is correct. Also make succeededCommits an AtomicInteger since it is incremented from multiple rewrite threads. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
268928a to
beac357
Compare
beac357 to
c4c6538
Compare
wombatu-kun
approved these changes
Jun 29, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes incorrect “partial commit failure” reporting in Spark rewrite_data_files when partial progress is enabled by computing the true number of commits executed (based on groupsPerCommit) rather than min(totalGroupCount, maxCommits). Also makes commit-success tracking thread-safe in the shared commit service and adds regression coverage across supported Spark variants.
Changes:
- Compute
totalCommitsasceil(totalGroupCount / groupsPerCommit)to avoid phantom failed-commit counts. - Make
BaseCommitService.succeededCommitsanAtomicIntegerto safely increment from multiple threads. - Add regression tests covering the “actual commits < maxCommits” scenario in Spark 3.5, 4.0, and 4.1 test suites.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| core/src/main/java/org/apache/iceberg/actions/BaseCommitService.java | Make succeeded commit counter atomic for concurrent increments during partial-progress commits. |
| spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/actions/RewriteDataFilesSparkAction.java | Correct total commit counting logic used to infer failed commits. |
| spark/v4.0/spark/src/main/java/org/apache/iceberg/spark/actions/RewriteDataFilesSparkAction.java | Correct total commit counting logic used to infer failed commits. |
| spark/v4.1/spark/src/main/java/org/apache/iceberg/spark/actions/RewriteDataFilesSparkAction.java | Correct total commit counting logic used to infer failed commits. |
| spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewriteDataFilesAction.java | Add regression test ensuring no false failures when actual commits are fewer than maxCommits. |
| spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewriteDataFilesAction.java | Add regression test ensuring no false failures when actual commits are fewer than maxCommits. |
| spark/v4.1/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewriteDataFilesAction.java | Add regression test ensuring no false failures when actual commits are fewer than maxCommits. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+1472
to
+1473
| // With 10 original groups and max commits of 7, we have 2 groups per commit. | ||
| // Hence, there will be 1 + 5 commits in total |
Comment on lines
+1471
to
+1472
| // With 10 original groups and max commits of 7, we have 2 groups per commit. | ||
| // Hence, there will be 1 + 5 commits in total |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
6092eb4 to
f3805c2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The rewrite data files procedure reported partial commit failures even when all commits succeeded, because it derived the total commit count as min(totalGroupCount, maxCommits). When groups are batched into groupsPerCommit = ceil(totalGroupCount / maxCommits) per commit, the actual number of commits is ceil(totalGroupCount / groupsPerCommit), which can be smaller. The mismatch made totalCommits - succeededCommits positive even with zero failures.
Compute totalCommits as ceil(totalGroupCount / groupsPerCommit) so the failed commit count is correct. Also make succeededCommits an AtomicInteger since it is incremented from multiple rewrite threads.
Issues