apache/iceberg · warning

Unable to read delta manifests for table

Error message

Unable to read delta manifests for table {} at checkpoint {}

What it means

CommittableToTableChangeConverter.processElement deserializes a Flink write committable's DeltaManifests and converts them into a TableChange for the maintenance committer. If reading/decoding the delta manifests or reading the completed files fails, it logs a warning with the table and checkpoint id and returns early — the committable is dropped, so those files' changes are not applied to the table change summary for that checkpoint.

Solutions

  1. Verify the savepoint/checkpoint was produced by the same (or compatible) Iceberg/Flink sink version; re-run the pipeline writing fresh checkpoints if versions were mixed
  2. Check whether referenced manifest files still exist and that FileIO on this operator can read the table location
  3. Inspect the nested exception; if manifests are corrupted, the affected checkpoint's committable is lost — reconcile via an Iceberg repair or re-write
  4. Avoid running orphan-file deletion with shorter intervals than checkpoint duration so pending manifests are not deleted
Defensive patterns

Strategy: validation

Validate before calling

// Before upgrading/restoring, verify serializer compatibility
Preconditions.checkState(
    DeltaManifestsSerializer.INSTANCE.getVersion() == savedVersion,
    "DeltaManifests version mismatch: recheck checkpoint/savepoint compatibility");

Try / catch

// The converter swallows the error and returns; detect via logs/metrics
// grep 'Unable to read delta manifests for table' taskmanager.log

Prevention

When it happens

Trigger: Raised in processElement when SimpleVersionedSerialization.readVersionAndDeSerialize(DeltaManifestsSerializer...) or FlinkManifestUtil.readCompletedFiles throws — corrupted/truncated manifest payload in the committable, serializer version mismatch (e.g. after an Iceberg upgrade restoring from an old savepoint), or unreadable manifest files in FileIO.

Common situations: Restoring a job from a savepoint/checkpoint made with a different Iceberg version whose DeltaManifests serialization differs; manifest data files deleted by orphan cleanup before conversion; io misconfiguration preventing manifest reads; corrupted object-store objects.

Understand the failure class

Background: "cannot parse invalid wire-format data", "cannot unmarshal", "failed unmarshalling": protobuf unmarshal errors explained — this error's family across 10 libraries.

Related errors


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

Appendix: source

Thrown at flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/sink/CommittableToTableChangeConverter.java:91

      CommittableMessage<IcebergCommittable> value, Context ctx, Collector<TableChange> out)
      throws Exception {
    if (value instanceof CommittableWithLineage) {
      IcebergCommittable committable =
          ((CommittableWithLineage<IcebergCommittable>) value).getCommittable();

      if (committable == null || committable.manifest().length == 0) {
        return;
      }

      DeltaManifests deltaManifests;
      WriteResult writeResult;
      try {
        deltaManifests =
            SimpleVersionedSerialization.readVersionAndDeSerialize(
                DeltaManifestsSerializer.INSTANCE, committable.manifest());
        writeResult = FlinkManifestUtil.readCompletedFiles(deltaManifests, io, specs);
      } catch (Exception e) {
        LOG.warn(
            "Unable to read delta manifests for table {} at checkpoint {}",
            tableName,
            committable.checkpointId(),
            e);
        return;
      }

      TableChange tableChange =
          new TableChange(
              Arrays.asList(writeResult.dataFiles()), Arrays.asList(writeResult.deleteFiles()));
      out.collect(tableChange);
      FlinkManifestUtil.deleteCommittedManifests(
          tableName, io, deltaManifests.manifests(), flinkJobId, committable.checkpointId());
    }
  }
}

View on GitHub (pinned to 86d9c8fc54)