apache/iceberg · error · RuntimeException
Cannot complete commit for rewrite, commit service…
Error message
Cannot complete commit for rewrite, commit service interrupted
What it means
Thrown from BaseCommitService.close when awaiting termination of the commit pool fails because the executor was interrupted (distinct from the timeout path, which only logs a warning). Some rewrite commits may not have landed in table state even though all files were written.
Solutions
- Re-run the rewrite action: file groups that failed to commit are re-derived and retried
- Verify table state (snapshot log) to determine which groups committed before treating output as final
- Ensure the commit pool is not interrupted prematurely by job cancellation
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at core/src/main/java/org/apache/iceberg/actions/BaseCommitService.java:185 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/847b8544dff0d7cf.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/apache/iceberg/actions/BaseCommitService.java:185
boolean timeout = false;
try {
// All rewrites have completed and all new files have been created, we are now waiting for
// the commit pool to finish doing its commits to Iceberg State. In the case of partial
// progress this should have been occurring simultaneously with rewrites, if not there should
// be only a single commit operation.
if (!committerService.awaitTermination(timeoutInMS, TimeUnit.MILLISECONDS)) {
LOG.warn(
"Commit operation did not complete within {} minutes ({} ms) of the all files "
+ "being rewritten. This may mean that some changes were not successfully committed to the "
+ "table.",
TimeUnit.MILLISECONDS.toMinutes(timeoutInMS),
timeoutInMS);
timeout = true;
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(
"Cannot complete commit for rewrite, commit service interrupted", e);
}
if (!completedRewrites.isEmpty() && timeout) {
LOG.error("Attempting to cleanup uncommitted file groups");
synchronized (completedRewrites) {
while (!completedRewrites.isEmpty()) {
abortFileGroup(completedRewrites.poll());
}
}
}
Preconditions.checkArgument(
!timeout && completedRewrites.isEmpty(),
"Timeout occurred when waiting for commits to complete. "
+ "%s file groups committed. %s file groups remain uncommitted. "
+ "Retry this operation to attempt rewriting the failed groups.",
committedRewrites.size(),View on GitHub (pinned to 86d9c8fc54)