apache/iceberg · error · IllegalArgumentException

Unsupported manifest content type:

Error message

Unsupported manifest content type:

What it means

IllegalArgumentException thrown in BaseSparkAction.entries when a ManifestFile's content() is neither ManifestContent.DATA nor DELETES. The switch selects the correct manifest reader (readManifest vs readDeleteManifest); an unknown content enum value has no reader, so the action fails fast.

Source

Thrown at spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/actions/BaseSparkAction.java:436

    }

    public CloseableIterator<FileInfo> entries(ManifestFileBean manifest) {
      ManifestContent content = manifest.content();
      FileIO io = table.getValue().io();
      Map<Integer, PartitionSpec> specs = table.getValue().specs();
      List<String> proj = ImmutableList.of(DataFile.FILE_PATH.name(), DataFile.CONTENT.name());

      switch (content) {
        case DATA:
          return CloseableIterator.transform(
              ManifestFiles.read(manifest, io, specs).select(proj).iterator(),
              ReadManifest::toFileInfo);
        case DELETES:
          return CloseableIterator.transform(
              ManifestFiles.readDeleteManifest(manifest, io, specs).select(proj).iterator(),
              ReadManifest::toFileInfo);
        default:
          throw new IllegalArgumentException("Unsupported manifest content type:" + content);
      }
    }

    static FileInfo toFileInfo(ContentFile<?> file) {
      return new FileInfo(file.location(), file.content().toString());
    }
  }
}

View on GitHub (pinned to 86d9c8fc54)

Solutions

  1. Upgrade the Iceberg Spark runtime to match or exceed the writer version
  2. Remove duplicate/old Iceberg jars from the Spark classpath
  3. Verify table metadata integrity with Iceberg's check tables action
Defensive patterns

Strategy: validation

Validate before calling

for (ManifestFile mf : table.currentSnapshot().allManifests(table.io())) {
  if (mf.content() != ManifestContent.DATA && mf.content() != ManifestContent.DELETES) {
    throw new IllegalStateException("Unknown manifest content: " + mf.content());
  }
}

Try / catch

try { action.entries(); } catch (IllegalArgumentException e) { if (e.getMessage().contains("Unsupported manifest content type")) { /* upgrade connector */ } throw e; }

Prevention

When it happens

Trigger: Running BaseSparkAction-derived actions against a table whose manifests were written with a manifest content type newer than the connector understands (spec evolution / version skew).

Common situations: Newer Iceberg writer introducing manifest content kinds processed by an older Spark connector; mixed Iceberg versions on the cluster classpath.

Related errors


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