apache/iceberg · error · RuntimeException

Interrupted while processing commits

Error message

Interrupted while processing commits

What it means

Thrown from the commit-service executor loop in BaseCommitService.start when the thread is interrupted while waiting for or processing rewrite file-group commits (e.g. by shutdown or cancellation). It marks the single-threaded committer as aborted mid-cycle; already-committed groups remain, pending ones do not.

Solutions

  1. Avoid shutting down the job/executor while the commit service is still draining in-progress commits
  2. Handle the interruption at the job level and re-run the rewrite action to retry uncommitted groups
  3. Check partial-progress/committed-state before assuming data loss
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at core/src/main/java/org/apache/iceberg/actions/BaseCommitService.java:128 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/7d70c5c4bd582241. Report an issue: GitHub.

Appendix: source

Thrown at core/src/main/java/org/apache/iceberg/actions/BaseCommitService.java:128

   * @param group group of files which are not yet committed
   */
  protected abstract void abortFileGroup(T group);

  /** Starts a single threaded executor service for handling file group commits. */
  public void start() {
    Preconditions.checkState(running.compareAndSet(false, true), "Commit service already started");
    LOG.info("Starting commit service for {}", table);
    committerService.execute(
        () -> {
          while (running.get() || !completedRewrites.isEmpty() || !inProgressCommits.isEmpty()) {
            try {
              if (completedRewrites.isEmpty() && inProgressCommits.isEmpty()) {
                // give other threads a chance to make progress
                Thread.sleep(100);
              }
            } catch (InterruptedException e) {
              Thread.currentThread().interrupt();
              throw new RuntimeException("Interrupted while processing commits", e);
            }

            // commit whatever is left once done with writing.
            if (!running.get() && !completedRewrites.isEmpty()) {
              commitReadyCommitGroups();
            }
          }
        });
  }

  /**
   * Places a file group in the queue and commits a batch of file groups if {@link
   * BaseCommitService#rewritesPerCommit} number of file groups are present in the queue.
   *
   * @param group file group to eventually be committed
   */
  public void offer(T group) {
    LOG.debug("Offered to commit service: {}", group);

View on GitHub (pinned to 86d9c8fc54)