apache/iceberg · warning

[For table {} with {}[{}] at {}]: Exception processing {}

Error message

[For table {} with {}[{}] at {}]: Exception processing {}

What it means

DataFileRewriteCommitter.processElement offers each executed rewrite file group to a background commit service that commits rewritten data files to the table. Any Exception in that processing (offering, starting, or the commit path) is logged with this prefixed warning, enriched with the table name, task name/index, record timestamp, and the offending executed group, so the group can be identified in logs. The message follows DataFileRewritePlanner.MESSAGE_PREFIX for cross-operator correlation.

Source

Thrown at flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/maintenance/operator/DataFileRewriteCommitter.java:118

  @Override
  public void processElement(StreamRecord<DataFileRewriteRunner.ExecutedGroup> streamRecord) {
    DataFileRewriteRunner.ExecutedGroup executedGroup = streamRecord.getValue();
    try {
      if (commitService == null) {
        // Refresh the table to get the latest snapshot for the committer
        table.refresh();

        FlinkRewriteDataFilesCommitManager commitManager =
            new FlinkRewriteDataFilesCommitManager(
                table, executedGroup.snapshotId(), streamRecord.getTimestamp(), branch);
        this.commitService = commitManager.service(executedGroup.groupsPerCommit());
        commitService.start();
      }

      commitService.offer(executedGroup.group());
    } catch (Exception e) {
      LOG.warn(
          DataFileRewritePlanner.MESSAGE_PREFIX + "Exception processing {}",
          tableName,
          taskName,
          taskIndex,
          streamRecord.getTimestamp(),
          executedGroup,
          e);
      output.collect(TaskResultAggregator.ERROR_STREAM, new StreamRecord<>(e));
      errorCounter.inc();
    }
  }

  @Override
  public void processWatermark(Watermark mark) throws Exception {
    try {
      if (commitService != null) {
        commitService.close();
      }

View on GitHub (pinned to 86d9c8fc54)

Solutions

  1. Find the full stack trace in taskmanager logs keyed by the message prefix and the table/task fields to identify the root cause.
  2. Re-run the maintenance procedure after ensuring no concurrent table rewrites/expiry are running against the same table.
  3. Check for a commit conflict (another writer committed concurrently) and retry the rewrite group.
  4. Verify the rewritten data files still exist in storage (snapshot expiration may have removed them mid-run).
Defensive patterns

Strategy: retry

Try / catch

try {
  commitService.offer(executedGroup.group());
} catch (Exception e) {
  LOG.warn(DataFileRewritePlanner.MESSAGE_PREFIX + "Exception processing {}",
      tableName, taskName, taskIndex, timestamp, executedGroup, e);
  // re-run the maintenance procedure for the affected table/group
}

Prevention

When it happens

Trigger: processElement receives an ExecutedGroup result and either commitManager.service(...)/commitService.start() or commitService.offer(executedGroup.group()) throws — e.g. the rewritten group references files that no longer exist or the table changed concurrently.

Common situations: A table was modified (compacted/expired) between the rewrite planner and committer stages so rewritten files are stale; concurrent commits conflict; snapshot expiration deleted files the group still references.

Related errors


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