apache/iceberg · warning

Suppressing exception in catch: {}

Error message

Suppressing exception in catch: {}

What it means

A warning logged in RowDataRewriter.map's cleanup path: after the original throwable occurred during commit, closing/aborting the writer also threw, and the secondary exception is attached via addSuppressed and logged. The original exception is still rethrown afterwards.

Source

Thrown at flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java:154

    public List<DataFile> map(CombinedScanTask task) throws Exception {
      // Initialize the task writer.
      this.writer = taskWriterFactory.create();
      try (DataIterator<RowData> iterator =
          new DataIterator<>(rowDataReader, task, io, encryptionManager)) {
        while (iterator.hasNext()) {
          RowData rowData = iterator.next();
          writer.write(rowData);
        }
        return Lists.newArrayList(writer.dataFiles());
      } catch (Throwable originalThrowable) {
        try {
          LOG.error("Aborting commit for  (subTaskId {}, attemptId {})", subTaskId, attemptId);
          writer.abort();
          LOG.error("Aborted commit for  (subTaskId {}, attemptId {})", subTaskId, attemptId);
        } catch (Throwable inner) {
          if (originalThrowable != inner) {
            originalThrowable.addSuppressed(inner);
            LOG.warn("Suppressing exception in catch: {}", inner.getMessage(), inner);
          }
        }

        if (originalThrowable instanceof Exception) {
          throw originalThrowable;
        } else {
          throw new RuntimeException(originalThrowable);
        }
      }
    }
  }
}

View on GitHub (pinned to 86d9c8fc54)

Solutions

  1. Inspect the suppressed exception logged with this message to find the secondary root cause (often fileIO or network)
  2. Fix the original exception first — it is the primary failure and is rethrown
  3. Verify storage credentials/permissions so abort/delete cleanup succeeds
Defensive patterns

Strategy: try-catch

Try / catch

try {
  writer.abort();
} catch (Throwable inner) {
  if (original != inner) original.addSuppressed(inner);
}

Prevention

When it happens

Trigger: Any Throwable thrown while aborting writers during commit failure handling (writer.abort() in the catch block of map), when the inner throwable is not the same object as the original.

Common situations: FileIO/network errors while cleaning up data files after a failed commit; two failures in quick succession (e.g. commit fails due to commit-state exception, abort fails due to S3 connectivity).

Related errors


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