{"record":{"id":"d28db7fb48d7c3e4","repo":"apache/iceberg","slug":"unsupported-manifest-content-type-content-d28db7","errorCode":null,"errorMessage":"Unsupported manifest content type:{content}","messagePattern":"Unsupported manifest content type:(.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"spark/v4.1/spark/src/main/java/org/apache/iceberg/spark/actions/BaseSparkAction.java","lineNumber":436,"sourceCode":"    }\n\n    public CloseableIterator<FileInfo> entries(ManifestFileBean manifest) {\n      ManifestContent content = manifest.content();\n      FileIO io = table.getValue().io();\n      Map<Integer, PartitionSpec> specs = table.getValue().specs();\n      List<String> proj = ImmutableList.of(DataFile.FILE_PATH.name(), DataFile.CONTENT.name());\n\n      switch (content) {\n        case DATA:\n          return CloseableIterator.transform(\n              ManifestFiles.read(manifest, io, specs).select(proj).iterator(),\n              ReadManifest::toFileInfo);\n        case DELETES:\n          return CloseableIterator.transform(\n              ManifestFiles.readDeleteManifest(manifest, io, specs).select(proj).iterator(),\n              ReadManifest::toFileInfo);\n        default:\n          throw new IllegalArgumentException(\"Unsupported manifest content type:\" + content);\n      }\n    }\n\n    static FileInfo toFileInfo(ContentFile<?> file) {\n      return new FileInfo(file.location(), file.content().toString());\n    }\n  }\n}\n","sourceCodeStart":418,"sourceCodeEnd":445,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/spark/v4.1/spark/src/main/java/org/apache/iceberg/spark/actions/BaseSparkAction.java#L418-L445","documentation":"ReadManifest.entries iterates manifests by content: DATA, DELETES (and other supported content kinds) each have a dedicated reader branch; an unrecognized ManifestContent falls through to IllegalArgumentException. It guards the manifest-reading switch against future/unknown content kinds.","triggerScenarios":"Actions that scan all manifests (call -> entries) encountering a manifest with a content kind the current code doesn't handle — e.g. newer manifest content types with an older runtime.","commonSituations":"Iceberg version skew between the writer that produced manifests and the Spark job reading them; corrupted manifest lists referencing wrong content.","solutions":["Upgrade the Iceberg Spark runtime to support the manifest content type","Inspect snapshot summary/manifest list to identify the content kind","Avoid mixing writer/reader Iceberg versions on the same table"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"boolean supported = content == ManifestContent.DATA || content == ManifestContent.DELETES;","typeGuard":"boolean isReadableManifest(ManifestContent c) { return c == ManifestContent.DATA || c == ManifestContent.DELETES; }","tryCatchPattern":"try { action.execute(); } catch (IllegalArgumentException e) { if (e.getMessage().contains(\"Unsupported manifest content\")) { /* upgrade runtime */ } throw e; }","preventionTips":["Upgrade the Spark extension when tables gain new manifest content kinds","Keep reader/writer Iceberg versions aligned","Inspect manifest-list content before bulk actions after upgrades"],"tags":["spark","manifest","unsupported-value"],"backgroundTag":"invalid-enum-value","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}