apache/flink · critical · IOException
Unrecognized version: {}
Error message
Unrecognized version: {} What it means
Thrown by SimpleTypeSerializerSnapshot.readSnapshot in its default switch branch. The snapshot format only recognizes readVersion 2 (legacy, with a class-name field that is read and discarded) and readVersion 3 (current, no payload). Any other version indicates the snapshot was written by an incompatible format revision or the data is corrupt.
Source
Thrown at flink-core/src/main/java/org/apache/flink/api/common/typeutils/SimpleTypeSerializerSnapshot.java:110
}
@Override
public void readSnapshot(int readVersion, DataInputView in, ClassLoader classLoader)
throws IOException {
switch (readVersion) {
case 3:
{
break;
}
case 2:
{
// we don't need the classname any more; read and drop to maintain compatibility
in.readUTF();
break;
}
default:
{
throw new IOException("Unrecognized version: " + readVersion);
}
}
}
// ------------------------------------------------------------------------
// standard utilities
// ------------------------------------------------------------------------
@Override
public final boolean equals(Object obj) {
return obj != null && obj.getClass() == getClass();
}
@Override
public final int hashCode() {
return getClass().hashCode();
}
View on GitHub (pinned to 2f3c205e92)
Solutions
- Restore the checkpoint with the Flink version that created it, then take a fresh savepoint and migrate.
- Check the Flink release notes for state backward-compatibility guarantees between your source and target versions.
- If the data is corrupt rather than version-incompatible, re-create the checkpoint from a known-good state.
Defensive patterns
Strategy: validation
Validate before calling
// Verify the Flink version supports the snapshot version in your checkpoints // SimpleTypeSerializerSnapshot supports readVersion 2 and 3 only (version 1 is pre-1.7.x)
Try / catch
try {
backend.restore(checkpointPath);
} catch (IOException e) {
if (e.getMessage().contains("Unrecognized version")) {
log.error("Snapshot version not supported by this Flink version.");
}
throw e;
} Prevention
- Restore old savepoints (pre-1.7.x) with the Flink version that created them first.
- Do not run custom Flink forks that bump CURRENT_VERSION without handling old reads.
- If the version integer is garbage, treat the file as corrupt and re-checkpoint.
When it happens
Trigger: Restoring a checkpoint that contains a SimpleTypeSerializerSnapshot written with a version other than 2 or 3. Version 1 is reserved for the legacy ParameterlessTypeSerializerConfig and is not handled here. A version above 3 would come from a future or forked Flink. Corrupt data can also produce an arbitrary version integer.
Common situations: Restoring a very old savepoint (pre-1.7.x, version 1) on a modern Flink. Restoring a checkpoint from a newer/custom Flink fork that bumped CURRENT_VERSION. Corrupted snapshot bytes where the version field holds garbage.
Related errors
- Unrecognized version: {}
- Unrecognized version for TypeSerializerSnapshot format: {}
- Corrupt data, magic number mismatch. Expected %8x, found %8x
- Corrupt data, magic number mismatch. Expected %8x, found %8x
- This object is a dummy TypeSerializer.
AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14).
Data as JSON: /api/errors/ccaec600851415e5.
Report an issue: GitHub.