{"record":{"id":"5846a63cec33703a","repo":"apache/iceberg","slug":"unsupported-manifest-content-type","errorCode":null,"errorMessage":"Unsupported manifest content type:","messagePattern":"Unsupported manifest content type:","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"spark/v3.5/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/v3.5/spark/src/main/java/org/apache/iceberg/spark/actions/BaseSparkAction.java#L418-L445","documentation":"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.","triggerScenarios":"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).","commonSituations":"Newer Iceberg writer introducing manifest content kinds processed by an older Spark connector; mixed Iceberg versions on the cluster classpath.","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"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"for (ManifestFile mf : table.currentSnapshot().allManifests(table.io())) {\n  if (mf.content() != ManifestContent.DATA && mf.content() != ManifestContent.DELETES) {\n    throw new IllegalStateException(\"Unknown manifest content: \" + mf.content());\n  }\n}","typeGuard":null,"tryCatchPattern":"try { action.entries(); } catch (IllegalArgumentException e) { if (e.getMessage().contains(\"Unsupported manifest content type\")) { /* upgrade connector */ } throw e; }","preventionTips":["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"],"tags":["spark","manifests","spec-version"],"backgroundTag":"unsupported-enum-value","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}