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

  1. Re-run the rewrite action: file groups that failed to commit are re-derived and retried
  2. Verify table state (snapshot log) to determine which groups committed before treating output as final
  3. 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)