apache/iceberg · warning

Received commit response when no commit in progress, this…

Error message

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

What it means

A DataWritten (commit response) envelope arrived while the coordinator was not in an in-progress commit, so the response cannot be matched to a current commit ID. The message is kept in the buffer but a warning is logged because this usually indicates a stale or duplicate response, often after coordinator recovery.

Solutions

  1. Treat as benign if it occurs once during coordinator startup/recovery; the stale response is ignored for commit counting.
  2. Increase coordinator consumer poll timeouts or reduce commit interval so responses are not orphaned after timeouts.
  3. Check coordinator topic retention/compaction and consumer group offsets to avoid replaying very old messages.
  4. If warnings recur continuously, verify all connector tasks are on a compatible Iceberg Connect version.
Defensive patterns

Strategy: retry

Prevention

When it happens

Trigger: CommitState.addResponse is called with an envelope outside an active commit window — e.g. a delayed Kafka message from a previous coordinator generation, or messages replayed from the coordinator topic during recovery.

Common situations: Coordinator task restarted and consuming old/uncommitted coordinator-topic records; slow data workers whose responses arrive after the coordinator timed out or completed the commit; duplicated topic records after rebalances.

Related errors


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

Appendix: source

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

class CommitState {
  private static final Logger LOG = LoggerFactory.getLogger(CommitState.class);

  private final List<Envelope> commitBuffer = Lists.newArrayList();
  private final List<DataComplete> readyBuffer = Lists.newArrayList();
  private int receivedPartitionCount = 0;
  private long startTime;
  private UUID currentCommitId;
  private final IcebergSinkConfig config;

  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() {

View on GitHub (pinned to 86d9c8fc54)