{"record":{"id":"f83485e9c06b90d6","repo":"apache/iceberg","slug":"unrecognized-version-or-corrupt-state-version-f83485","errorCode":null,"errorMessage":"Unrecognized version or corrupt state: ${version}","messagePattern":"Unrecognized version or corrupt state: (.+?)","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"flink/v2.1/flink/src/main/java/org/apache/iceberg/flink/sink/dynamic/DynamicWriteResultSerializer.java","lineNumber":62,"sourceCode":"    view.writeInt(writeResult.specId());\n    byte[] result = WRITE_RESULT_SERIALIZER.serialize(writeResult.writeResult());\n    view.write(result);\n    return out.toByteArray();\n  }\n\n  @Override\n  public DynamicWriteResult deserialize(int version, byte[] serialized) throws IOException {\n    if (version == 1) {\n      DataInputDeserializer view = new DataInputDeserializer(serialized);\n      TableKey key = TableKey.deserializeFrom(view);\n      int specId = view.readInt();\n      byte[] resultBuf = new byte[view.available()];\n      view.read(resultBuf);\n      WriteResult writeResult = WRITE_RESULT_SERIALIZER.deserialize(version, resultBuf);\n      return new DynamicWriteResult(key, specId, writeResult);\n    }\n\n    throw new IOException(\"Unrecognized version or corrupt state: \" + version);\n  }\n}\n","sourceCodeStart":44,"sourceCodeEnd":65,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v2.1/flink/src/main/java/org/apache/iceberg/flink/sink/dynamic/DynamicWriteResultSerializer.java#L44-L65","documentation":"DynamicWriteResultSerializer.deserialize only recognizes specific serialized version bytes for DynamicWriteResult records. When the leading version byte is not one of the known versions, the serializer cannot know how to decode the payload and throws this IOException. It almost always indicates the byte stream was not produced by a compatible version of this serializer.","triggerScenarios":"Deserializing a DynamicWriteResult whose data bytes were written by a newer or older serializer version, feeding corrupt/truncated bytes to DataInputViewStreamSerializer, or deserializing checkpoints/state written by a different Iceberg Flink version.","commonSituations":"Upgrading or downgrading the Iceberg Flink connector between jobs while resuming from savepoints/checkpoints, or manually replaying serialized records across incompatible versions.","solutions":["Use the same Iceberg Flink connector version that produced the serialized data when restoring from a checkpoint/savepoint.","Regenerate the data instead of deserializing stale serialized state; drop old checkpoints if data is transient.","Check for byte corruption or misaligned stream position before the version byte is read."],"exampleFix":"// before: resuming a job from a checkpoint made with iceberg-flink-runtime 1.9.x using 1.8.x jar\n// after: align runtime version or discard the incompatible checkpoint\n// job: --jar iceberg-flink-runtime-1.20-1.9.2.jar  (same version that wrote the checkpoint)","handlingStrategy":"try-catch","validationCode":"// verify serialized bytes come from the same connector version\nassert icebergFlinkRuntimeVersion.equals(PRODUCING_RUNTIME_VERSION);","typeGuard":null,"tryCatchPattern":"try {\n  DynamicWriteResult r = serializer.deserialize(in);\n} catch (IOException e) {\n  if (e.getMessage().contains(\"Unrecognized version or corrupt state\")) {\n    throw new IllegalStateException(\"Incompatible serialized state; restore from a matching connector version checkpoint\", e);\n  }\n  throw e;\n}","preventionTips":["Pin one iceberg-flink-runtime version for both job submission and recovery.","Rebuild state after connector upgrades instead of reusing old serialized records.","Never hand-craft or trim serialized record byte buffers."],"tags":["flink","serialization","version-compatibility"],"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-14T16:17:12.679Z"}