{"record":{"id":"e1209b72243f4a23","repo":"apache/iceberg","slug":"cannot-read-manifest-list-file-s","errorCode":null,"errorMessage":"Cannot read manifest list file: %s","messagePattern":"Cannot read manifest list file: (.+?)","errorType":"exception","errorClass":"RuntimeIOException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/apache/iceberg/AllManifestsTable.java","lineNumber":216,"sourceCode":"          InternalData.read(FileFormat.AVRO, io.newInputFile(manifestList))\n              .setRootType(GenericManifestFile.class)\n              .setCustomType(\n                  ManifestFile.PARTITION_SUMMARIES_ELEMENT_ID, GenericPartitionFieldSummary.class)\n              .project(ManifestFile.schema())\n              .build()) {\n\n        CloseableIterable<StructLike> rowIterable =\n            CloseableIterable.transform(\n                manifests,\n                manifest ->\n                    manifestFileToRow(\n                        specs.get(manifest.partitionSpecId()), manifest, referenceSnapshotId));\n\n        StructProjection projection = StructProjection.create(MANIFEST_FILE_SCHEMA, schema);\n        return CloseableIterable.transform(rowIterable, projection::wrap);\n\n      } catch (IOException e) {\n        throw new RuntimeIOException(\n            e, \"Cannot read manifest list file: %s\", manifestList.location());\n      }\n    }\n\n    @Override\n    public DataFile file() {\n      if (lazyDataFile == null) {\n        this.lazyDataFile =\n            DataFiles.builder(PartitionSpec.unpartitioned())\n                .withInputFile(io.newInputFile(manifestList))\n                .withRecordCount(1)\n                .withFormat(FileFormat.AVRO)\n                .build();\n      }\n\n      return lazyDataFile;\n    }\n","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/core/src/main/java/org/apache/iceberg/AllManifestsTable.java#L198-L234","documentation":"AllManifestsTable's rows() reader wraps IOException from reading a snapshot's manifest list file into RuntimeIOException with this message. The manifest list is the Avro file listing a snapshot's manifests; if it cannot be read (missing, unreadable, corrupt, or unreachable storage), the all_manifests metadata table scan fails. The table name/UUID in the message identifies which snapshot's manifest list failed.","triggerScenarios":"Querying the table.all_manifests metadata table when the manifest list Avro file for a snapshot is missing/deleted, storage credentials are invalid, or the file is corrupt/truncated.","commonSituations":"Expired or rotated S3/GCS/ADLS credentials; lifecycle policies that deleted old manifest lists; manually pruned metadata files; network/firewall issues to object storage; interrupted commit that left dangling references.","solutions":["Verify the manifest list file exists at the location referenced by the snapshot (check table metadata)","Fix storage credentials/permissions for the FileIO used by the table","Restore the file from backup or use register_table/rollback to a snapshot whose manifest lists are intact","Check network connectivity and endpoint configuration for the object store","Enable FileIO-level logging to distinguish NotFound vs permission vs IO errors"],"exampleFix":"// before\nTable t = catalog.loadTable(\"db.t\");\nt.scan(AllManifestsTable.NAME);\n// after\nif (t.currentSnapshot() != null) {\n  try {\n    t.io().newInputFile(t.currentSnapshot().manifestListLocation()).exists(); // precheck\n    t.scan(AllManifestsTable.NAME);\n  } catch (RuntimeIOException e) {\n    LOG.error(\"Manifest list unreadable: {}\", e.getMessage());\n  }\n}","handlingStrategy":"try-catch","validationCode":"// Verify manifest list readability before scanning the metadata table\nString loc = table.currentSnapshot().manifestListLocation();\nif (loc != null && !table.io().newInputFile(loc).exists()) {\n  throw new IllegalStateException(\"Missing manifest list: \" + loc);\n}","typeGuard":"null","tryCatchPattern":"try { table.scan(AllManifestsTable.NAME).planFiles(); } catch (RuntimeIOException e) { /* handle missing/unreadable manifest list; check cause */ }","preventionTips":["Disable lifecycle policies on metadata/manifest locations","Use consistent credentials for table IO","Avoid manually deleting manifest list files","Monitor commits so snapshots never reference pruned files"],"tags":["io","avro","object-storage"],"backgroundTag":"file-read-failed","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"}