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
- Upgrade the Iceberg Spark runtime to match or exceed the writer version
- Remove duplicate/old Iceberg jars from the Spark classpath
- 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
- Upgrade the Spark connector before reading tables written by newer Iceberg specs
- Keep a single Iceberg version on the cluster classpath
- Check manifest content enum values after any engine version change
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
- Unknown manifest content: ${content}
- Unsupported manifest type: ${manifestFile.content()}
- Ignoring provided staging location as new manifests will be
- Ignoring provided staging location as new manifests will be
- this.getClass().getName() + " doesn't implement sortBy(List<
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/5846a63cec33703a.
Report an issue: GitHub.