{"record":{"id":"3a33dfeb428501fa","repo":"apache/iceberg","slug":"failed-to-deserialize-icebergsourcesplit-encounte-3a33df","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/v2.2/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/v2.2/flink/src/main/java/org/apache/iceberg/flink/source/split/IcebergSourceSplitSerializer.java#L38-L65","documentation":"IcebergSourceSplitSerializer.deserialize switches on a version byte read from the payload; versions 1–3 are supported (though the message text says [1], a known message inaccuracy). This IOException signals an unrecognized split serialization version.","triggerScenarios":"Reading split bytes whose version byte is >3 — typically state written by a newer Iceberg connector than the one deserializing, or corrupt bytes.","commonSituations":"Flink connector downgrade between savepoint write and restore; mixed Iceberg versions across job cluster/taskmanager classpaths; corrupted checkpoint data.","solutions":["Upgrade the connector to at least the version that wrote the state","Restore from a savepoint/checkpoint written by a compatible version","Verify consistent iceberg-flink-runtime version across JM and TM","Ignore the misleading 'Supported version are [1]' text — actual supported versions are 1, 2, 3"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// peek first byte before deserializing\nint version = serialized[0];\nif (version > 3) {\n  throw new IOException(\"State written by newer connector (v\" + version + \"); upgrade iceberg-flink connector\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  return serializer.deserialize(splitVersion, serialized);\n} catch (IOException e) {\n  if (e.getMessage() != null && e.getMessage().contains(\"unsupported version\")) {\n    throw new IllegalStateException(\"Upgrade the Iceberg Flink connector to read this savepoint\", e);\n  }\n  throw e;\n}","preventionTips":["Upgrade connectors before restoring newer savepoints; test in staging","Keep one iceberg-flink-runtime version across the whole job","Remember supported versions are actually 1–3 despite the '[1]' in the message"],"tags":["flink","serialization","version-incompatibility","checkpoint-restore"],"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"}