{"record":{"id":"f9d471ed40d20b94","repo":"apache/iceberg","slug":"failed-to-deserialize-icebergsourcesplit-encounte","errorCode":null,"errorMessage":"Failed to deserialize IcebergSourceSplit. Encountered unsupported version: %d. Supported version are [1]","messagePattern":"Failed to deserialize IcebergSourceSplit\\. Encountered unsupported version: (.+?)\\. Supported version are \\[1\\]","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/source/split/IcebergSourceSplitSerializer.java","lineNumber":56,"sourceCode":"    return VERSION;\n  }\n\n  @Override\n  public byte[] serialize(IcebergSourceSplit split) throws IOException {\n    return split.serializeV3();\n  }\n\n  @Override\n  public IcebergSourceSplit deserialize(int version, byte[] serialized) throws IOException {\n    switch (version) {\n      case 1:\n        return IcebergSourceSplit.deserializeV1(serialized);\n      case 2:\n        return IcebergSourceSplit.deserializeV2(serialized, caseSensitive);\n      case 3:\n        return IcebergSourceSplit.deserializeV3(serialized, caseSensitive);\n      default:\n        throw new IOException(\n            String.format(\n                Locale.ROOT,\n                \"Failed to deserialize IcebergSourceSplit. \"\n                    + \"Encountered unsupported version: %d. Supported version are [1]\",\n                version));\n    }\n  }\n}\n","sourceCodeStart":38,"sourceCodeEnd":65,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/source/split/IcebergSourceSplitSerializer.java#L38-L65","documentation":"IcebergSourceSplitSerializer.deserialize only supports serialized split versions 1-3 (dispatching to deserializeV1/V2/V3). Any other version byte throws an IOException. This is the top-level guard against split state written by an incompatible connector version.","triggerScenarios":"Calling deserialize (via the SimpleVersionedSerializer used by the Flink split enumerator) on bytes whose version header is not 1, 2, or 3 — typically state from a newer or older iceberg-flink-runtime.","commonSituations":"Flink job restore across Iceberg connector major upgrades; mismatched iceberg-flink-runtime jars on JobManager vs TaskManagers; hand-edited or corrupted checkpoint metadata.","solutions":["Align the iceberg-flink-runtime jar version with the one that produced the savepoint/checkpoint","Upgrade all nodes to a connector version that supports the serialized version found","Discard the savepoint and start a new job (letting the enumerator re-plan splits)","Verify only one iceberg-flink-runtime version is on the classpath"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  IcebergSourceSplit split = serializer.deserialize(version, serialized);\n} catch (IOException e) {\n  // treat as incompatible state: discard and let the enumerator re-plan\n  LOG.warn(\"Unsupported split version {}; re-planning splits\", version, e);\n}","preventionTips":["Keep writer and reader connector versions identical within a cluster","Test savepoint compatibility before cluster upgrades","Avoid multiple iceberg-flink-runtime jars on the classpath"],"tags":["flink","serialization","version-compatibility"],"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"}