{"record":{"id":"776c5ca1f1e7e459","repo":"apache/iceberg","slug":"unknown-serialize-version-version","errorCode":null,"errorMessage":"Unknown serialize version: ${version}","messagePattern":"Unknown serialize version: (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"critical","filePath":"flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java","lineNumber":85,"sourceCode":"    out.write(deleteManifestBinary);\n\n    CharSequence[] referencedDataFiles = deltaManifests.referencedDataFiles();\n    out.writeInt(referencedDataFiles.length);\n    for (CharSequence referencedDataFile : referencedDataFiles) {\n      out.writeUTF(referencedDataFile.toString());\n    }\n\n    return binaryOut.toByteArray();\n  }\n\n  @Override\n  public DeltaManifests deserialize(int version, byte[] serialized) throws IOException {\n    if (version == VERSION_1) {\n      return deserializeV1(serialized);\n    } else if (version == VERSION_2) {\n      return deserializeV2(serialized);\n    } else {\n      throw new RuntimeException(\"Unknown serialize version: \" + version);\n    }\n  }\n\n  private DeltaManifests deserializeV1(byte[] serialized) throws IOException {\n    return new DeltaManifests(ManifestFiles.decode(serialized), null);\n  }\n\n  private DeltaManifests deserializeV2(byte[] serialized) throws IOException {\n    ManifestFile dataManifest = null;\n    ManifestFile deleteManifest = null;\n\n    ByteArrayInputStream binaryIn = new ByteArrayInputStream(serialized);\n    DataInputStream in = new DataInputStream(binaryIn);\n\n    int dataManifestSize = in.readInt();\n    if (dataManifestSize > 0) {\n      byte[] dataManifestBinary = new byte[dataManifestSize];\n      Preconditions.checkState(in.read(dataManifestBinary) == dataManifestSize);","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java#L67-L103","documentation":"DeltaManifestsSerializer.deserialize supports exactly two serialized-state versions (VERSION_1 and VERSION_2, used for manifest encoding of delta commits). If the checkpointed commit state carries any other version number, deserialization fails with a RuntimeException. This indicates state written by a different (usually newer) Iceberg version or corrupt version metadata.","triggerScenarios":"Restoring a Flink sink job whose two-phase-commit state contains DeltaManifests with a version byte not equal to 1 or 2, e.g. checkpoints written by a newer Iceberg release with a new format version.","commonSituations":"Downgrading Iceberg after checkpoints were written by a newer version; corrupted checkpoint bytes where the version field is invalid; manual state surgery.","solutions":["Restore with the same or newer Iceberg version that wrote the checkpoint; do not downgrade below the writer's format version.","Discard the incompatible checkpoint and start fresh (accepting a new snapshot for pending data).","Verify checkpoint integrity if corruption is suspected."],"exampleFix":"// before\n// running iceberg-flink-runtime 1.5 against checkpoints written by 1.6 with new version byte\nbin/flink run -s cp-newer-version ...\n// after\nbin/flink run -s cp-newer-version --jarfile iceberg-flink-runtime-1.6.jar","handlingStrategy":"try-catch","validationCode":"// Check the checkpoint was written by the same or older Iceberg format version before restoring","typeGuard":null,"tryCatchPattern":"try { manifests = DeltaManifestsSerializer.deserialize(version, bytes); } catch (RuntimeException e) { if (e.getMessage().startsWith(\"Unknown serialize version\")) { LOG.error(\"Checkpoint from incompatible Iceberg version\", e); throw e; } }","preventionTips":["Never downgrade Iceberg below the version that wrote your checkpoints","Take fresh savepoints with the target version before upgrades","Keep iceberg-flink-runtime versions consistent across the job's lifecycle"],"tags":["flink","checkpoint","serialization","versioning"],"backgroundTag":"unsupported-config-value","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}