apache/iceberg · warning

Received commit ready when no commit in progress, this can…

Error message

Received commit ready when no commit in progress, this can happen during recovery. Commit ID: {}

What it means

A DataComplete (commit ready) envelope arrived while no commit was in progress, so its partition assignments cannot be counted toward a current commit. Like the commit-response case, this typically reflects stale messages replayed during recovery; the payload is still buffered but the partition count is not incremented.

Solutions

  1. Benign during recovery — stale DataComplete messages are logged and effectively ignored; no action needed for one-off occurrences.
  2. Ensure old coordinator workers are fully stopped after rebalances so zombie coordinators stop publishing (check task liveness / fencing).
  3. Check consumer offsets on the coordinator topic to avoid reprocessing old records after restarts.
  4. If persistent, align all workers on the same connector version and verify commit timeouts are not shorter than data-worker response latency.
Defensive patterns

Strategy: retry

Prevention

When it happens

Trigger: CommitState.addReady is called outside an active commit, or with a DataComplete whose commitId differs from currentCommitId (the commitId-match branch is skipped).

Common situations: Zombie coordinator from a previous generation still publishing DataComplete messages after a rebalance; recovery replay of coordinator-topic records; data workers responding to a commit that already timed out.

Related errors


AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12). Data as JSON: /api/errors/a9309a2a2984bdb6. Report an issue: GitHub.

Appendix: source

Thrown at kafka-connect/kafka-connect/src/main/java/org/apache/iceberg/connect/channel/CommitState.java:65

  CommitState(IcebergSinkConfig config) {
    this.config = config;
  }

  void addResponse(Envelope envelope) {
    commitBuffer.add(envelope);
    if (!isCommitInProgress()) {
      DataWritten dataWritten = (DataWritten) envelope.event().payload();
      LOG.warn(
          "Received commit response when no commit in progress, this can happen during recovery. Commit ID: {}",
          dataWritten.commitId());
    }
  }

  void addReady(Envelope envelope) {
    DataComplete dataComplete = (DataComplete) envelope.event().payload();
    readyBuffer.add(dataComplete);
    if (!isCommitInProgress()) {
      LOG.warn(
          "Received commit ready when no commit in progress, this can happen during recovery. Commit ID: {}",
          dataComplete.commitId());
    } else if (Objects.equals(currentCommitId, dataComplete.commitId())) {
      receivedPartitionCount += dataComplete.assignments().size();
    }
  }

  UUID currentCommitId() {
    return currentCommitId;
  }

  boolean isCommitInProgress() {
    return currentCommitId != null;
  }

  boolean isCommitIntervalReached() {
    if (startTime == 0) {
      startTime = System.currentTimeMillis();

View on GitHub (pinned to 86d9c8fc54)