{"record":{"id":"c2e0b569f5652d3b","repo":"apache/flink","slug":"unsupported-version","errorCode":null,"errorMessage":"Unsupported version: {}","messagePattern":"Unsupported version: (.+?)","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"critical","filePath":"flink-filesystems/flink-s3-fs-native/src/main/java/org/apache/flink/fs/s3native/writer/NativeS3RecoverableSerializer.java","lineNumber":109,"sourceCode":"            out.writeInt(part.getPartNumber());\n            out.writeUTF(part.getETag());\n        }\n        String incompleteObject = recoverable.incompleteObjectName();\n        if (incompleteObject == null) {\n            out.writeBoolean(false);\n        } else {\n            out.writeBoolean(true);\n            out.writeUTF(incompleteObject);\n            out.writeLong(recoverable.incompleteObjectLength());\n        }\n        out.flush();\n        return outputStream.toByteArray();\n    }\n\n    @Override\n    public NativeS3Recoverable deserialize(int version, byte[] serialized) throws IOException {\n        if (version != CURRENT_VERSION) {\n            throw new IOException(\"Unsupported version: \" + version);\n        }\n        ByteArrayInputStream inputStream = new ByteArrayInputStream(serialized);\n        DataInputStream in = new DataInputStream(inputStream);\n        String objectName = in.readUTF();\n        String uploadId = in.readUTF();\n        long numBytesInParts = in.readLong();\n        int numParts = in.readInt();\n        List<PartETag> parts = new ArrayList<>(numParts);\n        for (int i = 0; i < numParts; i++) {\n            int partNumber = in.readInt();\n            String eTag = in.readUTF();\n            parts.add(new PartETag(partNumber, eTag));\n        }\n        boolean hasIncompletePart = in.readBoolean();\n        String incompleteObjectName = null;\n        long incompleteObjectLength = -1;\n        if (hasIncompletePart) {\n            incompleteObjectName = in.readUTF();","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-filesystems/flink-s3-fs-native/src/main/java/org/apache/flink/fs/s3native/writer/NativeS3RecoverableSerializer.java#L91-L127","documentation":"NativeS3RecoverableSerializer.deserialize rejects any serialized form whose version differs from CURRENT_VERSION. The serializer is SimpleVersionedSerializer-based: Flink stores a version number next to the bytes, and this implementation supports only its exact current layout, so mismatched versions are treated as unrecoverable corruption rather than attempted migration.","triggerScenarios":"Restoring a checkpoint/savepoint that was written by a different (older or newer) version of flink-s3-fs-native whose NativeS3RecoverableSerializer layout differs; any manual corruption of the serialized bytes' version header.","commonSituations":"Upgrading or downgrading the flink-s3-fs-native plugin jar without discarding incompatible state; mixing plugin versions between the checkpoint-writing job and the restoring job; loading a savepoint taken with an internal build; stale state from before a serializer format change.","solutions":["Pin one consistent version of the flink-s3-fs-native plugin across the job that wrote the checkpoint and the job restoring it.","If you must move forward, discard the incompatible checkpoint/savepoint and restart the streaming source from an explicit reset point (resume behavior, not exact state).","Verify the plugin jar in lib/ matches the Flink distribution version (plugin shading must match the connector build).","If you control the code, add migration paths in deserialize() for prior versions instead of hard-failing."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// before restoring, verify plugin/state provenance\nint v = NativeS3RecoverableSerializer.INSTANCE.getVersion();\n// ensure the checkpoint was written by a job using the same plugin version","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pin one flink-s3-fs-native version across write and restore jobs.","Discard incompatible checkpoints when changing plugin versions.","Document serializer format changes in release notes."],"tags":["s3","serialization","versioning","state-compat","checkpoint"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}