{"record":{"id":"48ca97d8e1b14214","repo":"apache/iceberg","slug":"cannot-read-manifest-with-a-deletion-vector","errorCode":null,"errorMessage":"Cannot read manifest with a deletion vector: ","messagePattern":"Cannot read manifest with a deletion vector: ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/apache/iceberg/V4ManifestReader.java","lineNumber":221,"sourceCode":"        ManifestFile manifest,\n        FileIO io,\n        Map<Integer, PartitionSpec> specsById,\n        String tableLocation) {\n      Preconditions.checkArgument(tableLocation != null, \"Invalid table location: null\");\n      int formatVersion = manifest.formatVersion();\n      Preconditions.checkArgument(\n          formatVersion == SUPPORTED_FORMAT_VERSION,\n          \"Cannot read manifest with format version %s: only %s is supported\",\n          formatVersion,\n          SUPPORTED_FORMAT_VERSION);\n      Preconditions.checkState(\n          manifest.content() == ManifestContent.DATA,\n          \"Cannot read manifest with content %s: only data manifests are supported: %s\",\n          manifest.content(),\n          manifest.path());\n\n      if (manifest.manifestDeletionVector() != null) {\n        throw new UnsupportedOperationException(\n            \"Cannot read manifest with a deletion vector: \" + manifest.path());\n      }\n\n      this.manifest = manifest;\n      this.io = io;\n      this.specsById = specsById;\n      this.tableLocation = tableLocation;\n      this.unionPartitionType = Partitioning.unionPartitionTypes(specsById.values());\n      Schema base = TrackedFile.schema(unionPartitionType, Types.StructType.of());\n      // the read schema carries row_position (via BASE_TYPE) so the reader can fill manifestPos\n      this.fullSchema =\n          TypeUtil.replaceFieldTypes(\n              base, ImmutableMap.of(TrackedFile.TRACKING.fieldId(), TrackingStruct.BASE_TYPE));\n    }\n\n    /** Sets a filter; files that cannot match the expression are skipped. */\n    Builder filter(Expression expr) {\n      Preconditions.checkArgument(expr != null, \"Invalid filter: null\");","sourceCodeStart":203,"sourceCodeEnd":239,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/core/src/main/java/org/apache/iceberg/V4ManifestReader.java#L203-L239","documentation":"Preconditions guard in V4ManifestReader's Builder: the manifest file being opened contains deletion vectors (a v4 feature) that this reader cannot process. The table location argument was already validated; the failure is purely about manifest content — a format-version/feature mismatch between the writer and this reader.","triggerScenarios":"Thrown at core/src/main/java/org/apache/iceberg/V4ManifestReader.java:221 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Upgrade Iceberg to a version that supports reading deletion vectors","Write the table without deletion vectors (avoid v4 DV features)","Fail fast with a clear message when detecting format-version-4 manifests with DVs"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}